2017-04-02 108 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

非常感謝!你的回答就像一個魅力。 –

相關問題