我有一个用于视图模型的编辑器模板,EditFeeContentViewModel
. 此视图模型包含一个通过 JavaScript 添加/删除的集合。每当添加新项目时,我都会通过微模板添加以下 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
让父视图模型可以设置为表示属性名称,但这似乎很麻烦且容易出错。有更好的方法吗?