2

您好我有视图中的下拉列表一个MVC应用程序:MVC验证了DROPDOWNLIST

<div class="editor-label"> 
      @Html.LabelFor(model => model.CompanyId) 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownList("CompanyId", "--- Select ---") 
      @Html.ValidationMessageFor(model => model.CompanyId) 
     </div> 

在这个模型中,我有:

[Required(ErrorMessage = "Company is a required field.")] 
     [Display(Name = "Company:")] 
     public int CompanyId{ get; set; } 

在控制器创建GET方法我有:

ViewBag.CompanyId= new SelectList(_repository.GetAll<Company>(), "Id", "Name"); 

所以最初编辑器是一个标准的文本框,验证工作正常。现在我已将其更改为下拉列表,除验证外,一切正常。所以在HTTP POST创建,如果你没有从下拉列表中选择任何东西ModelState.IsValid是错误的,这是正确的。

问题是与下拉列表中的验证消息不再出现在这个领域,就像他们当它是一个文本框。我明白我可能有ValidationMessageFor不正确。

有人可以请告诉我如何得到这个工作?

回答

2

是否有一个特别的原因,你使用Html.DropDownList而不是Html.DropDownListFor?

让我给你举一个例子,说明我过去是如何做到的,它可能或不会帮助你。

@Html.DropDownListFor(model => model.Vendor.State, new SelectList(Model.StatesList, "State1", "State1"), new { @class = "textboxSmall" })<br /> 
@Html.ValidationMessageFor(model => model.Vendor.State) 

状态列表是一个属性集合在我的视图模型,我用它来填充下拉列表。

public List<State> StatesList 
     { 
      get 
      { 
       StatesCollection st = new StatesCollection(); 
       st.LoadStatesList(); 

       return st.StatesList; 
      } 
     } 
+0

这看起来不错,但要得到它的工作我需要一个属性Model.Companies在我的模型?我没有这个。也许我应该? – AnonyMouse

+0

是的,你会的。正如你可以从我的代码中看到的,我在供应商视图模型中有一个属性,这是我验证的对象。视图模型由我需要基本构建表单的其他属性组成,例如填充下拉列表的列表。做这些事情有很多方法,但我发现这是使用它的最好方法。希望能帮助到你... – macou