3

これが私の問題です...

Ajax.BeginForm を使用して作成された AJAX フォームを最初にレンダリングして表示するページがあります。いくつかの基準が入力され、AJAX フォームが投稿されます。Html.BeginForm を使用して作成された HTML フォームを含む部分ビューが返されます。

これまでのところとても良いです... この時点までのすべてがうまくいきます。私の目立たないクライアント検証は、部分ビューから作成された要素に対してうまく機能します。私の問題は、いくつかの動的入力要素を (jQuery 経由で) 作成し、部分ビューによって作成されたフォームに挿入/追加しようとすると発生します。動的に作成された要素に対して控えめなクライアント検証を行うことができません。

私は試しました: - 既存の要素のクローンを作成し、それらの ID/名前を変更し、DOM に追加します。- HTML 文字列を作成し、DOM に挿入します。

動的要素を挿入するたびに、次の呼び出しを試みました: - $.validator.unobtrusive.parseElement() [新しい要素] - $.validator.unobtrusive.parse() [新しいコンテナ、ドキュメントなど] - $.validator.unobtrusive .parseDynamicContent() [プラグイン]

jQueryコードの詳細は次のとおりです...

$("#insert").live("click", function () {
    var html = "<input type='text' value='' name='CustomerNominationVolume' id='CustomerNominationVolume' data-val-required='The Nomination (Dth) field is required.' data-val-number='The field Nomination (Dth) must be a number.' data-val='true' /><br />"
    html += "<span class='field-validation-valid' data-valmsg-replace='true' data-valmsg-for='CustomerNominationVolume'></span>";
    $("#new").html(html);
});

$("#parse").live("click", function () {
    $.validator.unobtrusive.parse(document);
});

$("#validate").live("click", function () {
    var element = $("#CustomerNominationVolume");
    var form = $(element).first().closest('form');
    form.validate().element(element);
});

どんな助けでも大歓迎です!

編集: 追加の調査とテストを行った後、このソリューションに戻って、なぜうまくいかなかったのかを判断しました。結局のところ、リストの一部である新しい入力要素を挿入していました。したがって、新しい要素の名前は、something[0].id、something[1].id などのようになります。

これらの名前が原因で、$.validator.unobtrusive.parseDynamicContent() 関数が次の行で失敗しました: $('[name=' + elname + ']').rules("add", args);

これを単純に $("[name='" + elname + "']").rules("add", args); に変更しました。

すべてが正常に動作するようになりました...

4

1 に答える 1

13

動的コンテンツを追加したら、次を呼び出します。

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

「$('form')」はフォームのセレクターです。

これでうまくいくはずです。

于 2011-10-25T16:00:51.270 に答える