我的MVC下拉列表存在问题。但文本框没有问题,只有下拉列表。我想首先说我花了很多时间,仍然没有解决方案。我还想提一下,属性标有[Required]属性。在视图中,我还有jquery.min,jquery.validate.min,jquery.validate.unobstrusive.min。 我也有:
<add key="ClientValidationEnabled" value="true">
<add key="UnobtrusiveJavaScriptEnabled" value="true">
ViewModel代码:
public class RegistrationViewModel
{
[Required(ErrorMessage = "State is required.")]
public IEnumerable<SelectListItem> State { get; set; }
}
视图中的:
<div>
@Html.DropDownListFor(model => model.StateSelectedItem, (List<SelectListItem>)Model.State)
@Html.ValidationMessageFor(model => model.State)
</div>
任何想法,想法,评论? 感谢。
答案 0 :(得分:0)
当您渲染剃刀视图时,SELECT元素的name
属性值将为“StateSelectedItem”,并且将具有所选选项的值。因此,您应该将Required
数据注释应用于该属性。
public class RegistrationViewModel
{
[Required(ErrorMessage = "State is required.")]
public string StateSelectedItem {set;get;}
public IEnumerable<SelectListItem> State { get; set; }
}
在您看来,您不需要再次将Model.State
属性转换为List<SelectListItem>
,因为它已经是List<SelectListItem>
类型。还要为StateSelectedItem
属性创建验证消息。
@model RegistrationViewModel
@using(Html.BeginForm())
{
<div>
@Html.DropDownListFor(x => x.StateSelectedItem, Model.State, "Select one")
@Html.ValidationMessageFor(x => x.StateSelectedItem)
</div>
}
这应该有效,假设您将一些项目加载到视图模型的State collection属性中。
public ActionResult Register()
{
var vm = new RegistrationViewModel();
vm.State= new List<SelectListItem> {
new SelectListItem { Value="MI", Text="Michigan" },
new SelectListItem { Value="NY", Text="NewYork" },
};
return View(vm).
}