0

この問題について多くのことを検索した後、私はコミュニティに助けを求めています:

私はビューでそのようなことをしています ( @Html.Action または PartialView を使用している場合、問題は同じです

@for(int i= 0; i< Model.Contacts.Count(); i++)
{
     @Html.EditorFor(m => m.Contacts[i] , "AccreditationContact" )
}

そのような古典的な EditorTemplate または PartialView があります

    @model FrontOffice.Models.AccreditationStepSevenModel

    <div>
        @Html.LabelFor(m => m.Nom)
        @Html.TextBoxFor(m => m.Nom)
        @Html.ValidationMessageFor(m => m.Nom)
    </div>
[There is a lots of other fields here] 

フィールド「Nom」用に生成された html は次のようになります。

    <input id="Contacts_0__Nom" name="Contacts[0].Nom" type="text" value="Doe" > 
    <input id="Contacts_1__Nom" name="Contacts[1].Nom" type="text" value="Doe1" >
    <input id="Contacts_2__Nom" name="Contacts[2].Nom" type="text" value="Doe2" >

フォームを送信しても問題ありません。すべてのフィールドは、コントローラーのネイティブ ModelBinder によって配列に正しくバインドされます。

ここで、JavaScript で別の AccreditationStepSevenModel を動的に生成したいと思います。Jquery で $load を使用しました。問題は、生成された html が名前をインクリメントせず、同じ名前の複数のフィールドがあり、ModelBinder が機能しないことです...

私はjavascriptで名前を変更することを考えました.これはうまくいくでしょうが、より良い解決策はありますか?

ご協力いただきありがとうございます !

4

2 に答える 2

0

クライアント側の検証を機能させる方法を見つけました:

ajax呼び出しの後、次のようなバリデーターをリセットする必要があります:$( "#addAccredBtn")。click(function(){

            $.ajax({
                url: this.href,
                cache: false,
                success: function (html) {
                    $("#accreds").append(html);

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


            return false;
        });
于 2013-02-28T15:53:13.667 に答える
0

デフォルトのModelBinderは、インデックスが0から始まり、要素ごとに1ずつ増加する、途切れのない整数のシーケンスである場合にのみ機能します。非シーケンシャルインデックスをサポートするには、インデクサーを具体化する必要があります。

<input type="hidden" name="Contacts.Index" value="0" />     
<input id="Contacts_0__Nom" name="Contacts[0].Nom" type="text" value="Doe" >

アイデアを得るには、このブログ投稿を参照してください:可変長リストの編集、ASP.NETMVC2スタイル

于 2013-02-28T09:53:02.823 に答える