知道为什么以下下拉列表不会使用必填字段验证类型为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>
答案 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")