下拉列表未按要求显示,但标记为必需

时间:2016-02-18 22:02:28

标签: jquery asp.net-mvc-3 asp.net-mvc-4

我的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>

任何想法,想法,评论? 感谢。

1 个答案:

答案 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).
}