1

必須フィールドを持つモデルで部分ビューを最初にレンダリングするプライマリ ビューを読み込んでいます。ご想像のとおり、クライアント検証は最初のパーシャルで機能しますが、AJAX を使用して同じパーシャル ビューを動的にレンダリングすると、クライアント検証は動的に追加されたフィールドを一意として認識できません。

結局のところ、それらは同じ名前、ID、および検証データダッシュ属性を持っていますが、クライアント検証メッセージを取得して、スクリプトでクライアント検証を手動でチェックして適用することなく、各フィールドを個別に認識する方法があるため、これに驚かないでください?

プライマリ ビュー:

@{Html.EnableClientValidation(); }
@{using (Html.BeginForm()){
    @Html.Partial("_WorkItem")
    <div id="newItemHolder">

    </div>

    <div id="addItem">Add Item</div>
}}

<script type="text/javascript">
  $(document).ready(function () {
    $("#addItem").click(function () {
        $.ajax({
            type: "POST",
            data: {},
            url: "Controller/NewItem",
            success: function (data) {
                //inject partial views content to newItemHolder
                jQuery.validator.unobtrusive.parse($("#newItemHolder"));
            }
        });
    });
  });
</script>
4

2 に答える 2

1

含まれているフォームを更新しない場合は、次のものも必要になる場合があります。

success: function (data) {
    var holder = $('#newItemHolder');
    // get the containing form
    var form = $(holder).closest('form');

    holder.html(data);
    form.removeData('validator');
    form.removeData('unobtrusiveValidation');
    jQuery.validator.unobtrusive.parse(form);
}
于 2012-06-13T20:56:10.857 に答える
0

これを修正する方法を見つけました。他の誰かが同じシナリオ/問題を抱えている場合に備えて、私が思いついた解決策を含めます。誰かがデータ注釈を介してクライアント側の検証を使用して各パーシャルを検証するという目標を達成した場合は、あなたもそれをどのように行ったかを聞きたいです!

私がしたことは、各パーシャルをフォームに入れることでした。そのようにして、検証は各フォームのフィールドに一意の名前を付け、次にいくつかのトリガーを使用し、最終的にフォーム送信で次のように呼び出しました。

$('form').each(function () {
    $(this).validate().form();
});

その結果、必要な各フィールドは個別に検証され、1 つの必須フィールドに値を指定すると、同じ名前を共有するすべてのコントロールに対してクライアント側の検証が成功しなくなります。

于 2012-06-14T20:26:17.137 に答える