c#
  • javascript
  • asp.net-mvc
  • 2013-05-06 95 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作为前缀的各个领域。

    相关问题