您好我在视图中有一个带有下拉列表的MVC应用程序:
<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; }
在创建获取方法的控制器中,我有:
ViewBag.CompanyId= new SelectList(_repository.GetAll<Company>(), "Id", "Name");
所以最初编辑器是标准文本框,验证工作正常。现在我已将其更改为下拉列表,除验证外,一切正常。所以在HTTP POST创建时,如果你没有从下拉列表中选择任何内容,那么ModelState.IsValid
就是假的,这是正确的。
问题出在下拉列表中,此字段不再出现验证消息,就像它们是文本框时一样。我知道我的ValidationMessageFor可能不正确。
有人可以告诉我如何让这个工作吗?
答案 0 :(得分: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;
}
}