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

Drop down list not showing as required but is marked as required

我对 MVC 的下拉列表有疑问。但是文本框没有问题,只有下拉列表。我想首先说我在这上面花了很多时间,但仍然没有解决方案。我还想提一下,这些属性标有 [Required] 属性。在视图中,我还有jquery.min、jquery.validate.min、jquery.validate.unobstrusive.min。 我也有 :

<add key="ClientValidationEnabled" value="true"> 
<add key="UnobtrusiveJavaScriptEnabled" value="true"> 

视图模型代码:

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>

有什么想法、想法、评论吗? 谢谢

当您呈现 razor 视图时,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 集合 属性,这应该可行。

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