为dropdownListFor获取不同的验证消息“必须是数字”

时间:2013-12-22 10:22:11

标签: asp.net-mvc asp.net-mvc-4 razor html-select

我有一个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; }

1 个答案:

答案 0 :(得分:3)

确保视图模型上的CategoryId属性是可以为null的整数:

[Required(ErrorMessage = "field required")]
public int? CategoryId { get; set; }

此外,您似乎将DropDownList值绑定到视图模型上的Categories属性。确保此属性为IEnumerable<T>,其中T是包含CategoryIdCategoryName属性的类型。例如:

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>属性。如果选项值不是整数,则会出现此错误。