Asp.net mvc 3 NETMVC。EditorTemplate或@Html.Action/Partial中的名称重复

Asp.net mvc 3 NETMVC。EditorTemplate或@Html.Action/Partial中的名称重复,asp.net-mvc-3,razor,modelbinder,Asp.net Mvc 3,Razor,Modelbinder,在对这个问题进行了大量研究之后,我请求您为社区提供帮助: 我在视图中做了类似的事情(如果我使用@Html.Action或PartialView,问题是相同的) @for(int i= 0; i< Model.Contacts.Count(); i++) { @Html.EditorFor(m => m.Contacts[i] , "AccreditationContact" ) } for(int i=0;im.Contacts[i],“认证联系人”) } 我有一个经典

在对这个问题进行了大量研究之后,我请求您为社区提供帮助:

我在视图中做了类似的事情(如果我使用@Html.Action或PartialView,问题是相同的)

@for(int i= 0; i< Model.Contacts.Count(); i++)
{
     @Html.EditorFor(m => m.Contacts[i] , "AccreditationContact" )
}
for(int i=0;im.Contacts[i],“认证联系人”) } 我有一个经典的编辑模板或类似的局部视图

    @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] 
@model FrontOffice.Models.authentication步骤七模型
@LabelFor(m=>m.Nom)
@Html.TextBoxFor(m=>m.Nom)
@Html.ValidationMessageFor(m=>m.Nom)
[这里还有很多其他字段]
为字段“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中动态生成另一个AuthenticationStepSevenModel,我在Jquery中使用了$load。问题是生成的html没有增加名称,然后我有多个同名字段,我的ModelBinder不再工作

我曾考虑过用javascript重命名名称,这会奏效,但有更好的解决方案吗


感谢您的帮助!

如果索引是连续的整数序列(从0开始,每个元素增加1),则默认的ModelBinder将只起作用。 要支持非顺序索引,必须指定索引器,例如

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


查看这篇博文,了解一下这个想法:

我发现了如何让客户端验证工作:

在ajax调用之后,我们需要像这样重置验证器: $(“#addacgredbtn”)。单击(函数(){


谢谢Kibria。这是我一直在寻找的链接。我想知道微软是否在Mvc框架中考虑过它,但显然不是……Steeve的助手很棒!事实上Steeve的解决方案很好,只是客户端验证不起作用……但我会满意的
            $.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;
        });