2017-04-02 11 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つの問題。最初に、ユーザーが選択を行わなかったときにエラーメッセージが表示されず、選択肢を保存できません(範囲基準に一致する選択がないことが明らかです)。私は間違って何をしていますか?

+2

'[範囲(1、int.MaxValue、ErrorMessage =" Please make a selection ")]属性を削除してください。メッセージを表示するために '@ RequiredMessageFor(m => m.UnitOfMeasure)'をインクルードしましたか? –

+0

それを修正しました。 !おかげでスティーブン! –

答えて

2

フォームが送信していないのにエラーメッセージが表示されない場合は、メッセージのプレースホルダーが含まれていないことを意味します。あなたはjquery.validate.unobtrusive.jsプラグインがあなたのEnumDropDownListFor()方法によって生成されたHTMLでdata-val-*の属性を解析し

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

含まれ、メッセージのプレースホルダとして機能する要素を渡すなど、jquery.validate.jsにルールを追加する必要があります。あなたの場合、何も表示されないので、何も表示されませんが、フォームは無効であり、送信されません。

[Required]属性はすでにenumのいずれかの値を選択する必要があるため、[Range]という属性は不要です。単純に使うことができます

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

ありがとう!あなたの答えは魅力のように働いた。 –

関連する問題