0

C#MVCプロジェクトでExpressiveAnnotationsを使用しています。ビュー内のモデルを検証する際に問題なく使用できます。しかし、JavaScriptを使用して入力要素を追加することで、実行時にフォームを拡張したいと考えています。要素を追加した後、私は、フォームのバリデーションを再作成するためにこれらのスクリプトを使用します。動的フォームのExpressiveAnnotations

var form = $("form").removeData("validator").removeData("unobtrusiveValidation"); 
$.validator.unobtrusive.parse(form); 

要素がdata-val-assertthatdata-val-assertthat-fieldsmapdata-val-assertthat-expressionおよび他のいくつかのdata-val-xxxの属性が追加されます。検証は新しい要素で機能しているようですが、エラーメッセージはすべて空です。私はここで何か間違ったことをしているに違いないと思う。何かヒント?

+1

検証エラーメッセージが空でない場合、何が有効になっていると思いますか? JavaScriptエラーコンソールはどうですか? – Sparky

+0

入力が無効な場合、サマリにエラーが表示され、対応するコントロールが正しく強調表示されていますが、サマリに表示されるエラーメッセージは空の文字列です。 – William

答えて

0

この問題でかなりの間働いて、最後に現在のASP .NET MVCプロジェクトの問題を発見しました。この問題は、エラーをどのように表示するかに隠されています。以前私は、次のようなコードを持っている:

$("form").bind("invalid-form.validate", function (form, validator) { 
    $(validator.errorList).each(function() { 
    $("<li/>").html(this.message).appendTo(msg); 
    }); 
}); 

問題はthis.messageは、これらの動的に追加された要素のために空になっています!私の回避策は次のとおりです。

$(validator.errorList).each(function() { 
    var error = this.message; 
    if (!!!error) { 
    error = $(this.element).attr("data-val-" + this.method); 
    } 
    $("<li/>").html(error).appendTo(msg); 
}); 

なぜ私のASP .NET MVCプロジェクトでエラーメッセージが空であるのかわかりません。私はJSFiddleでシンプテストを作成しようとしましたが、すべてが期待どおりに動作しています....