c#
  • javascript
  • asp.net-mvc
  • 2013-05-06 181 views 0 likes 
    0

    我有一個編輯器模板用於視圖模型EditFeeContentViewModel。此視圖模型包含通過JavaScript添加/刪除的集合。我通過microtemplating加入以下HTML每當增加了新的項目,以便在模型綁定將努力爲:編輯器模板中的模型綁定嵌套集合

    <script id="feeContentTemplate" type="text/html"> 
        <tr id='RowContentId<%= ContentId%>'> 
         <td> 
          <input type="hidden" name="ContentFeeViewModels.Index" value="<%= ContentId%>"/> 
          <input type="hidden" name="ContentFeeViewModels[<%= ContentId%>].ContentId" value="<%= ContentId%>" /> 
          <%= ContentId%> 
         </td> 
         <td><input type="hidden" name="ContentFeeViewModels[<%= ContentId%>].ContentName" value="<%= ContentName%>" /> 
          <%= ContentName%> 
         </td> 
         <td><input type="text"  name="ContentFeeViewModels[<%= ContentId%>].Allocation" value="<%= Allocation%>" /></td> 
         <td><input type="text"  name="ContentFeeViewModels[<%= ContentId%>].Comments" value="<%= Comments%>"/></td> 
         <td><a href="javascript:removeContentRow('#RowContentId<%= ContentId%>')">Remove</a></td> 
        </tr> 
    </script> 
    

    現在,這工作得很好,當我的視圖模型不是嵌套的。它提交給控制器,具有所有數據完好無損等。

    但是,當它嵌套時,名稱顯然不再正確,模型綁定失敗。而不是ContentFeeViewModels.Index,我可能需要FeeContents.ContentFeeViewModels.Index

    由於這是通過JavaScript完成的,我不知道如何使用HTML助手來正確生成名稱。如何查看視圖模型是否嵌套並在哪裏生成一個字符串來表示它的位置,以便模型綁定正確地發生?

    我想過手動設置EditFeeContentViewModel中的一個字符串,父視圖模型可以設置爲表示屬性名稱,但這看起來很麻煩並且容易出錯。有沒有更好的方法呢?

    +0

    這與我最近問的問題非常相似:http://stackoverflow.com/questions/16204288/razor-form-with-editable-collection-using-partial-with-knockout-template-integra/16385935# 16385935。這不是確切的,但也許你可以得到一些應用程序。 – 2013-05-06 21:19:54

    回答

    0

    我想你可以用ViewData.TemplateInfo.HtmlFieldPrefix來得到路徑值。

    所以我的代碼現在看起來像:

    var contentFeeModelPrefix = ""; 
    if ("@ViewData.TemplateInfo.HtmlFieldPrefix" != "") { 
        contentFeeModelPrefix = "@ViewData.TemplateInfo.HtmlFieldPrefix" + "."; 
    } 
    

    然後我就可以使用該變量在我的JavaScript作爲前綴的各個領域。

    相關問題