Dropdownlist的MVC验证

时间:2011-07-05 21:21:55

标签: asp.net-mvc model-view-controller validation drop-down-menu

您好我在视图中有一个带有下拉列表的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可能不正确。

有人可以告诉我如何让这个工作吗?

1 个答案:

答案 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;
            }
        }