2016-08-17 1 views
2

MVC6、 モデル検証サーバー側に問題があります。MVC6、ユーザーがビューからdecimal/int値を空にして送信すると、サーバー側のモデルの検証に間違ったメッセージが表示される

public string Genre { get; set; } 
public decimal Price { get; set; } 

ユーザーがビューから空の小数/ int型の値を提出する場合は、サーバー側のモデルの検証は、誤ったメッセージ、すなわち値が「」無効であることを示しています。

コントローラをチェックインしましたが、着信モデルのデフォルト値は0でしたが、ModelStateはrawValue = ""となっています。したがって、データ型とスロー・メッセージとは競合します。

モデルはデフォルトで(ユーザーが空で送信しても)、 ""(string.empty)ではなく0で検証する必要があります。罰金が、サーバ側モデルの検証作業

フロントjavascriptの検証は、「『値』と誤ったエラーメッセージ を示し、有効ではありません」

小数点/ intが常にデフォルト値として0を得ています。

解決方法はありますか?

+0

これはJavaScriptですか?あなたの質問に適切な言語にタグを付けて、より良い可視性を得ることができます。 – FrankerZ

+0

これは、MicrosoftのMVCフレームワーク(asp.net、C#) – jHilscher

+0

asp.netコア1.0 mvc 6、モデル検証&バインディング関連 – Mak

答えて

2

コントローラに検証領域を追加して、自分の検証を行うことができます。

if (model.Price == 0) 
    ModelState.AddModelError("", "please enter the price ."); 
    return View(); 

場合、またはあなたのModelState.IsValid()あなたは/ int型のフィールドを小数検証から防ぐために、モデルの状態を伝えることができますfalseです。あなたのModelState.IsValid()する前にこのコードを追加します

ModelState.Remove("Price"); 

はそれにあなたの自己を値0を追加します。
や価格は必須フィールドである場合には、データの注釈を追加することができますが、それにカスタマイズされた検証エラーを追加する属性:

[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Please enter thye price .")] 
public decimal price {get;set;} 
0

私は私のASPコアプロジェクトで同様の問題がありました。モデルの検証は、Range属性とRequiredエラーメッセージを使用して整数に対して設定されました。しかし、ユーザーがinputコントロールを空にすると、エラーメッセージが表示されます。

"値が無効です。"

モデル値は0ですが、生の値は空です。 null可能なプロパティと属性を使用するためにモデルを編集する必要があります。そして、私が望むように結果を得る。

[Range(1, int.MaxValue,ErrorMessage = "My message1")] 
[Required (ErrorMessage = "My message2")] 
public int? PreparationTimeMinutes { get; set; } 

誰かが助けてくれることを願っています。

関連する問題