2017-04-02 95 views
0

我是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" }) 

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

+2

删除'[Range(1,int.MaxValue,ErrorMessage =“请做出选择”)]'属性。所有需要的是你的[[Required]'属性(并在该属性中添加ErrorMessage),并且你是否包含了@ValidationMessageFor(m => m.UnitOfMeasure)'以显示消息? –

+0

修复了!谢谢斯蒂芬! –

回答

2

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

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

jquery.validate.unobtrusive.js插件解析由您EnumDropDownListFor()方法生成的HTML data-val-*属性,并添加规则jquery.validate.js,包括通过充当占位符消息的元素。在你的情况下,没有任何东西可以显示,但表格是无效的,不会被提交。

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

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

非常感谢!你的回答就像一个魅力。 –