我有一个DropDownListFor,我将验证消息称为“需要字段”
@Html.DropDownListFor(m => m.CategoryId, new SelectList(Model.Categories, "CategoryId", "CategoryName"), "-- Select Category--", new { id = "idCategory", style = "float:left;" })
@Html.ValidationMessageFor(model => model.CategoryId)
但我总是得到错误消息“字段CategoryId必须是数字”
我的模特
[Required(ErrorMessage = "This field is required")]
public long CategoryId { get; set; }
答案 0 :(得分:3)
确保视图模型上的CategoryId
属性是可以为null的整数:
[Required(ErrorMessage = "field required")]
public int? CategoryId { get; set; }
此外,您似乎将DropDownList值绑定到视图模型上的Categories
属性。确保此属性为IEnumerable<T>
,其中T
是包含CategoryId
和CategoryName
属性的类型。例如:
public class CategoryViewModel
{
public int CategoryId { get; set; }
public string CategoryName { get; set; }
}
现在你的视图模型看起来像这样:
public class MyViewModel
{
[Required(ErrorMessage = "field required")]
public int? CategoryId { get; set; }
public IList<CategoryViewModel> Categories { get; set; }
}
最重要的是检查生成的HTML并确保此下拉列表的所有<option>
字段的值确实是整数:
<select class="input-validation-error" data-val="true" data-val-number="The field CategoryId must be a number." data-val-required="The CategoryId field is required." id="idCategory" name="CategoryId" style="float:left;">
<option value="">-- Select Category--</option>
<option value="1">category 1</option>
<option value="2">category 2</option>
<option value="3">category 3</option>
<option value="4">category 4</option>
<option value="5">category 5</option>
</select>
请注意添加到data-val-number="The field CategoryId must be a number."
元素的<select>
属性。如果选项值不是整数,则会出现此错误。