私は部分的なビューを持っています:
@Html.EditorFor(model => model.BM)
@Html.ValidationMessageFor(model => model.BM)
メインビューで、私が行う場合:
@using (Html.BeginForm())
{
@Html.Partial("QuoteStep1", Model)
}
次に、$('form')。validate()を呼び出すとフォームが検証され、データを入力しないとエラーメッセージが表示されます。
ただし、代わりにAJAX呼び出しを使用して部分ビューをロードした場合、$('form')。validate()の呼び出しは引き続き機能します(trueまたはfalseを正しく返します)が、エラーメッセージは表示されなくなります。
部分ビューの上部に次を追加する必要があることをどこかで読みました。
@if (this.ViewContext.FormContext == null)
{
this.ViewContext.FormContext = new FormContext();
}
しかし、それはまったく効果がありません。
[編集:私の研究の更新]
2時間以上のデバッグの後、私はいくつかのことを発見しました。まず、AJAXリクエストを使用してフォームのコンテンツを読み込むため、新しく追加されたHTMLコントロールはDOMの一部ではありません。したがって、jqueryバリデーターがこれらのコントロールについて知る方法はありません。
したがって、AJAX成功コールバックに次のコード行を追加すると、トリックを実行する必要があります。
$.validator.unobtrusive.parse($('form'));
これは、AJAXの結果がDOMに追加された直後に設定されます。
バリデーターをさらにデバッグすると、次のコードが呼び出されていることがわかります。
$(selector).find(":input[data-val=true]").each(function () {
$jQval.unobtrusive.parseElement(this, true);
});
つまり、新しく追加された入力ボックスが見つかりました。
$ jQval.unobtrusive.parseElementメソッドでは、次のコードがヒットします。
this.adapt({
element: element,
form: form,
message: message,
params: paramValues,
rules: rules,
messages: messages
});
要素は私のテキストボックスで、フォームは表示フォームで、メッセージは「BMは数字でなければなりません」です。だから、すべてが私には良さそうです。
しかし、何を推測してください...検証エラーメッセージはまだ表示されません!
助けてくれるjqueryの第一人者はいますか?:)