2009-07-14 86 views
38

妥当性検査が失敗した場合、私はModelStateを変更する私のコントローラに妥当性検査機能を書くことを楽しんでいます。たとえば:ASP.NET MVCのModelState.AddModelErrorのキーパラメータのポイントは何ですか?

private bool ValidateMoney(string raw, string name, decimal min, decimal max) { 
    try { 
     var dec = Convert.ToDecimal(raw); 

     if (dec < min) { 
      throw new ArgumentOutOfRangeException(name + " must be >= " + min); 
     } 
     else if (dec > max) { 
      throw new ArgumentOutOfRangeException(name + " must be <= " + max); 
     } 
    } 
    catch (Exception ex) { 
     ModelState.AddModelError(name, ex.GetUserMessage()); 
    } 
    return ModelState.IsValid; 
} 

しかしは、私がModelState.AddModelErrorにその愚かな「キー」引数に置くために知っていることはありません。 (この例では、UI表示名に設定しました)

MVC開発者は、追加したときに何を考えましたか?

+3

という名前のモデルのフィールドと結合されるキー引数は多分ドキュメントはそれがあるべきほど明確ではないが、全く愚かではありません。 :) – splattne

答えて

52

キーは、表示する正確なエラーメッセージを知るためにValidationMessage HTMLヘルパーによって使用されます。

例:

<%=Html.TextBox("Name") %> <br /> 
<%=Html.ValidationMessage("Name") %> 

にModelState辞書内のキー「名前」を持っているメッセージが表示されますValidationMessageヘルパー。

+6

検証は、ブログだけでなく、あらゆる種類のアプリケーションで使用されます。 –

+2

@Frankは丁重に、機能が涼しいですか?エラーはあなたが望むフィールドのすぐ隣に現れます!私はgoogleがこの質問に私を連れて来た後でこれを学んだ。 – gideon

+4

キーは空の文字列にすることができますが、nullにすることはできません。キーが空の文字列の場合は、Html.ValidationSummary(false)htmlヘルパーを使用して表示されます –

9

keyパラメータを使用して、検証エラーをフォームフィールドに関連付けることができます。

@Html.TextBoxFor(またはそれに似たもの)と@Html.ValidationMessageForを使用した場合、フィールドのHTML name(検査要素を使用)からキーの値を取得できます。

を使用したばかりの場合は、@Html.ValidationMessage("AKeyIMadeUp")を使用して検証プレースホルダを追加し、ModelState.AddModelError("AKeyIMadeUp", "The value you entered is no good");のようなメッセージを表示できます。 失敗したフォームの提出は、あなたがモデル

[Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Current password")] 
    public string OldPassword { get; set; } 

でフィールドを作成し、あなたにModelStateが無効になっているときになどのようにその場でエラーメッセージが表示さバインドを設定することができたとしながら

1

は実際にあなたはどんな検証メッセージを設定することができます。

ModelState.AddModelError("OldPassword", "Current Password do not match "); 

は、あなたのエラーメッセージが「OldPassword」

関連する問題