MVC3 DropDownList没有使用[Required]类字段作为int类型进行验证?

时间:2011-09-29 02:25:25

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

知道为什么以下下拉列表不会使用必填字段验证类型为int(下面的“标题”字段)?

    [Required]             // This works!
    [Display(Name = "Name")]
    public string Name { get; set; }

    [Required]             // This doesn't work 
    [Display(Name = "Title")]
    public int TitleId { get; set; }



     <div class="editor-label">
        @Html.LabelFor(model => model.Name, "Name")
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.Name)
        @Html.ValidationMessageFor(model => model.Name, "This can't be blank!")
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.TitleId, "Title")
    </div>
    <div class="editor-field">
         @Html.DropDownListFor(model => model.TitleId, (SelectList)ViewBag.TitleId, String.Empty)
        @Html.ValidationMessageFor(model => model.TitleId)
    </div>

enter image description here

3 个答案:

答案 0 :(得分:21)

根据this work item,当ViewBag中的SelectList使用与相关字段相同的名称时,客户端验证会中断。 (在你的情况下,两者都是TitleId。)

试试这个:

@Html.DropDownListFor(model => 
    model.TitleId, (SelectList)ViewBag.TitleIdList, String.Empty)

将SelectList重命名为TitleIdList

答案 1 :(得分:3)

[Required]仅适用于可空对象,而int不能为空。 尝试使用int?代替int

答案 2 :(得分:1)

或者试试这个。在site.css文件中添加以下代码

select.input-validation-error {
    /*border: 1px solid #e80c4d;*/
    /*Other styles*/
}

当它为空时,这将显示下拉边框颜色为红色。

在浏览页面中:

@Html.DropDownListFor(model => model.TitleID, Model.TitleIDList, "-- Select --", new { @class = "dropdownlist" }) @Html.ValidationMessageFor(model => model.TitleID, "This can't be blank")