C# 下拉列表验证
如果我单击submit按钮而没有从DropDownList中选择值,则在我的Create操作中,我的DropDownList上会收到一条验证错误消息 我得到的验证错误是值“”无效。我希望验证错误消息说,状态是必需的取而代之 我在ViewModel的StId属性中添加了必需的validation属性,但这并没有解决问题 客户模型C# 下拉列表验证,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,如果我单击submit按钮而没有从DropDownList中选择值,则在我的Create操作中,我的DropDownList上会收到一条验证错误消息 我得到的验证错误是值“”无效。我希望验证错误消息说,状态是必需的取而代之 我在ViewModel的StId属性中添加了必需的validation属性,但这并没有解决问题 客户模型 public class Customer { public int CustId { get; set; } public string Cus
public class Customer
{
public int CustId { get; set; }
public string CustFirstName { get; set; }
public string CustLastName { get; set; }
public int StId { get; set; }
public State State { get; set; }
}
public class State
{
public int StId { get; set; }
public string StAbbr { get; set; }
public List<Customer> Customers { get; set; }
}
public class CustomerFormViewModel
{
public int CustId { get; set; }
[Required(ErrorMessage = "First Name is required!")]
[Display(Name = "First Name")]
public string CustFirstName { get; set; }
[Required(ErrorMessage = "Last Name is required!")]
[Display(Name = "Last Name")]
public string CustLastName { get; set; }
[Required(ErrorMessage = "State is required!")]
[Display(Name = "State")]
public int StId { get; set; }
public IEnumerable<State> States { get; set; }
}
@using (Html.BeginForm("Create", "Customer"))
{
<div class="form-group">
@Html.LabelFor(c => c.CustFirstName)
@Html.TextBoxFor(c => c.CustFirstName, new { @class = "form-control" })
@Html.ValidationMessageFor(c => c.CustFirstName)
</div>
<div class="form-group">
@Html.LabelFor(c => c.CustLastName)
@Html.TextBoxFor(c => c.CustLastName, new { @class = "form-control" })
@Html.ValidationMessageFor(c => c.CustLastName)
</div>
<div class="form-group">
@Html.LabelFor(s => s.StId)
@Html.DropDownListFor(s => s.StId, new SelectList(Model.States, "StId", "StAbbr"), "", new { @class="form-control"})
@Html.ValidationMessageFor(s => s.StId)
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
}
状态模型
public class Customer
{
public int CustId { get; set; }
public string CustFirstName { get; set; }
public string CustLastName { get; set; }
public int StId { get; set; }
public State State { get; set; }
}
public class State
{
public int StId { get; set; }
public string StAbbr { get; set; }
public List<Customer> Customers { get; set; }
}
public class CustomerFormViewModel
{
public int CustId { get; set; }
[Required(ErrorMessage = "First Name is required!")]
[Display(Name = "First Name")]
public string CustFirstName { get; set; }
[Required(ErrorMessage = "Last Name is required!")]
[Display(Name = "Last Name")]
public string CustLastName { get; set; }
[Required(ErrorMessage = "State is required!")]
[Display(Name = "State")]
public int StId { get; set; }
public IEnumerable<State> States { get; set; }
}
@using (Html.BeginForm("Create", "Customer"))
{
<div class="form-group">
@Html.LabelFor(c => c.CustFirstName)
@Html.TextBoxFor(c => c.CustFirstName, new { @class = "form-control" })
@Html.ValidationMessageFor(c => c.CustFirstName)
</div>
<div class="form-group">
@Html.LabelFor(c => c.CustLastName)
@Html.TextBoxFor(c => c.CustLastName, new { @class = "form-control" })
@Html.ValidationMessageFor(c => c.CustLastName)
</div>
<div class="form-group">
@Html.LabelFor(s => s.StId)
@Html.DropDownListFor(s => s.StId, new SelectList(Model.States, "StId", "StAbbr"), "", new { @class="form-control"})
@Html.ValidationMessageFor(s => s.StId)
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
}
创建.chtml
public class Customer
{
public int CustId { get; set; }
public string CustFirstName { get; set; }
public string CustLastName { get; set; }
public int StId { get; set; }
public State State { get; set; }
}
public class State
{
public int StId { get; set; }
public string StAbbr { get; set; }
public List<Customer> Customers { get; set; }
}
public class CustomerFormViewModel
{
public int CustId { get; set; }
[Required(ErrorMessage = "First Name is required!")]
[Display(Name = "First Name")]
public string CustFirstName { get; set; }
[Required(ErrorMessage = "Last Name is required!")]
[Display(Name = "Last Name")]
public string CustLastName { get; set; }
[Required(ErrorMessage = "State is required!")]
[Display(Name = "State")]
public int StId { get; set; }
public IEnumerable<State> States { get; set; }
}
@using (Html.BeginForm("Create", "Customer"))
{
<div class="form-group">
@Html.LabelFor(c => c.CustFirstName)
@Html.TextBoxFor(c => c.CustFirstName, new { @class = "form-control" })
@Html.ValidationMessageFor(c => c.CustFirstName)
</div>
<div class="form-group">
@Html.LabelFor(c => c.CustLastName)
@Html.TextBoxFor(c => c.CustLastName, new { @class = "form-control" })
@Html.ValidationMessageFor(c => c.CustLastName)
</div>
<div class="form-group">
@Html.LabelFor(s => s.StId)
@Html.DropDownListFor(s => s.StId, new SelectList(Model.States, "StId", "StAbbr"), "", new { @class="form-control"})
@Html.ValidationMessageFor(s => s.StId)
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
}
@使用(Html.BeginForm(“创建”、“客户”))
{
@LabelFor(c=>c.CustFirstName)
@TextBoxFor(c=>c.CustFirstName,新的{@class=“form control”})
@Html.ValidationMessageFor(c=>c.CustFirstName)
@LabelFor(c=>c.CustLastName)
@TextBoxFor(c=>c.CustLastName,new{@class=“form control”})
@Html.ValidationMessageFor(c=>c.CustLastName)
@LabelFor(s=>s.StId)
@DropDownListFor(s=>s.StId,new SelectList(Model.States,“StId”,“stirr”),“”,new{@class=“form control”})
@Html.ValidationMessageFor(s=>s.StId)
提交
}
在web.config中添加此行
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
在布局页面中包括以下jquery文件
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
如果需要任何验证,使用此按钮,您的提交按钮单击事件不会进入您视图的[HttpPost]操作。请在cshtml文件中包含jquery.validate.js和jquery.validate.unobtrusive.js
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
您显示的代码将显示状态为必填@Stephen Muecke,你可能会想,因为我添加了[Required(ErrorMessage=“State is Required!”)]
,但它只显示值“”,这是无效的(我刚刚测试过),所以您没有向我们展示它。另外,在else
块中,它应该是vm.States=_context.States.ToList();返回视图(vm)代码>(无需初始化新视图模型-只需返回您发布的视图模型即可。我使用Chrome Developer工具检查了DropDownList,结果显示,PA OH WV
值“”无效。
您做得很好。请在cshtml文件中包含jquery.validate.js和jquery.validate.unobtrusive.jsng这样运行项目,在浏览器中按Ctrl+Shift+I(右键单击并打开inspect元素),然后在“源”选项卡中检查加载的jquery文件。更改的web.config文件很重要。您必须更改根文件夹web.config文件,而不是视图文件夹中的文件(仅适用于该文件夹)。这并没有回答这个问题,它只是显示了如何包含客户端验证的脚本(这是一个好主意),但没有解决OP的声明(由于OP显示的代码没有添加该错误,因此无论如何都无法回答)@最近单击,我只有一个web.config文件,它位于我的应用程序的根目录中。此外,我使用的ASP.NET MVC核心不包括“脚本”文件夹。此外,当您打开web.config文件时,建议将应用程序设置放置在appsettings.json文件中。我仍然按照您的建议使用web.config并将
标记与create.cshtml页面一起添加到布局页面,但仍然没有成功。