2013-02-27 69 views
0

在這個問題上搜索了很多,我阿斯金幫助社區後:Asp.net MVC。在EditorTemplate或@ Html.Action重名/部分

我在做財產以後這樣的視圖(問題是相同的,如果我使用@ 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] 

爲現場生成的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" > 

當我提交我的形式在這裏沒問題,一切都正常在我的控制器

現在我想以動態的JavaScript生成另一個AccreditationStepSevenModel綁定到一個數組由本地ModelBinder的,我使用的用Jquery加載$。問題是,生成的HTML不增加名稱,然後我有多個字段具有相同的名稱,我的ModelBinder不工作了...

我想過在JavaScript中重命名的名稱,這將工作,但有更好的解決方案嗎?

感謝您的幫助!

回答

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" > 

看到這個博客帖子的想法:Editing a variable length list, ASP.NET MVC 2-style

+0

感謝Kibria,這是鏈接的我一直在尋找。我在想,如果微軟在MVC弗拉姆想過那種ework但顯然不是...... Steeve的幫手很棒! – 2013-02-28 13:08:45

+0

實際上,Steeve的解決方案效果很好,除了客戶端驗證不起作用......但我會滿意它 – 2013-02-28 15:32:26

0

我發現如何使客戶端驗證工作:

Ajax調用,我們需要重新驗證這樣的後: $(「#addAccredBtn」)。點擊(函數(){

  $.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; 
     });