2011-10-24 32 views
23

私は標準のMVC3レイザービューを目立たないJavaScriptの検証で使用しています。@Html.ValidationSummaryを使用してフォームの上部に表示します。標準の検証(例:[Required]など)が合格すると、ユーザーが[送信]ボタンを押したときに起動する非常にカスタムのクライアント側検証が実行されます。 (妥当性検証では、いくつかのフォーム要素を調べて、適切なセットがチェックされているかどうかを確認します.1つのフィールドに対して新しいカスタムバリデーターを作成するだけでは簡単ではありません)。@ Html.ValidationSummaryにエラーメッセージを追加

ValidationSummaryリストに表示される可能性のあるエラーを希望しますが、そこにエラーメッセージが表示されるようにする方法がわかりません。

クライアント側で
+1

ModelStateにエラーを追加するには

だけでこれを行いますか? –

答えて

37

function YourCustomValidator() { 
    // do your validation logic here via JavaScript 
    return true; // or false based on your validation logic 
} 
$(document).ready(function() { 
    // take your own form-selector like ("form", this) 
    $("form", this).first().submit(function() { 
     return (YourCustomValidator() && $(this).valid()); 
    }); 
}); 

またはサーバー側で:

は、あなたがこのようなモデルがあると思う:

public class Test { 
    [Required] 
    [StringLength(100)] 
    public string FullName { get; set; } 
} 

、あなたが検証していますそれ:

if(ModelState.IsValid) { // default validations run here 
    if(/* some custom validations run here, there is an error about "FullName" */){ 
     // you should set the "key" for Model-Error to "FullName" 
     ModelState.AddModelError("FullName","error-message goes here") 
    } 
    if(/* some custom validations run here, the error is global, not on "FullName" */){ 
     // you should set the "key" for Model-Error to an empty-string 
     ModelState.AddModelError("","error-message goes here") 
    } 
    // also you can test for model-errors again like this: 
    if(ModelState.IsValid) { // if you add any error above, this will be "false" 

    } 
} 
+3

ありがとう - 私はちょうどこの場合のクライアント側を探しています。私の質問は、 "YourCustomValidator"でエラーが見つかった場合、どうすれば特定のエラーメッセージが表示されるのですか?私はすでに "AddModelError"を介して必要なエラーメッセージを設定することができるサーバー側の検証を持っていますが、Javascriptで同等の処理を行いたいと思います。 – Kras

+0

JSを介してエラーメッセージを表示するためのカスタムロジックを作成したり、C#を使用してカスタム検証属性クラスを作成したりすることができます。どちらが意味ですか? –

+3

よく記載されています:] +1 – Shahin

4

ModelStateError Messageを追加すると、エラーメッセージが表示されるはずです(ただし、ValidationSummary()が表示されている場合)。クライアント側またはサーバ側で

ModelState.AddModelError("ColumnNameOrErrorMessageKeyInState","error message goes here") 
関連する問題