枚举保存失败,错误消息未显示

时间:2017-04-02 01:35:06

标签: c# asp.net-mvc razor enums data-annotations

我是MVC的新手。我在我的成分表中为UnitOfMeasure定义了一个枚举,如下所示:

public enum UnitOfMeasure
{
    oz=1,
    lb=2,
    ml=3,
    liter=4,
    gal=5
}

我已经定义了相应的字段如下:

[Required]
[Range(1, int.MaxValue, ErrorMessage = "Please make a selection")]
public UnitOfMeasure? UnitOfMeasure { get; set; }

“请选择”,根据需要,在视图中显示为默认值,但我希望用户必须在保存之前进行选择。我在视图中使用EnumDropDownListFor,如下所示。

 @Html.EnumDropDownListFor(model => model.UnitOfMeasure,
                              "--Please select--", 
                              new { @class = "form-control" }) 

两个问题。首先,当用户没有做出选择时,错误消息没有出现,其次,我根本无法保存任何选择(显然没有选择符合范围标准)。我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果表单未提交,但未显示错误消息,则表示您未包含该消息的占位符。你需要包括

@Html.ValidationMessageFor(m => m.UnitOfMeasure)

jquery.validate.unobtrusive.js插件解析由data-val-*方法生成的html中的EnumDropDownListFor()属性,并将规则添加到jquery.validate.js,包括传递充当消息的占位符。在你的情况下,没有,所以没有任何东西可以显示,但表格无效,不提交。

请注意,您[Range]属性是不必要的,因为[Required]属性已经意味着您必须选择其中一个enum值。你可以简单地使用

[Required(ErrorMessage = "Please make a selection")]
public UnitOfMeasure? UnitOfMeasure { get; set; }