模型绑定编辑器模板中的嵌套集合
Model binding nested collections in editor templates
我有一个用于视图模型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>
现在,当我的视图模型没有嵌套时,这工作得很好。它提交给控制器,保存所有完整的数据,等等。
然而,当它嵌套时,显然名称不再正确,模型绑定失败。我可能需要FeeContents.ContentFeeViewModels.Index
而不是ContentFeeViewModels.Index
。
由于这是通过JavaScript完成的,我不知道如何使用HTML帮助程序来正确地生成名称。我怎样才能找出视图模型是否/在哪里嵌套并生成一个字符串来表示其位置,以便正确地进行模型绑定?
我想过在EditFeeContentViewModel
中手动设置一个字符串,父视图模型可以设置该字符串来表示属性名称,但这似乎很麻烦,而且容易出错。有更好的方法吗?
我发现您可以使用ViewData.TemplateInfo.HtmlFieldPrefix
来获取路径值。
var contentFeeModelPrefix = "";
if ("@ViewData.TemplateInfo.HtmlFieldPrefix" != "") {
contentFeeModelPrefix = "@ViewData.TemplateInfo.HtmlFieldPrefix" + ".";
}
我可以在JavaScript中使用该变量作为各个字段的前缀。
相关文章:
- React:使用索引变量更新嵌套集合
- 通过对象的嵌套集合进行递归总是在第一个叶节点处终止
- 帆嵌套集合
- 有关为嵌套集合构建模板的建议
- 具有深度嵌套集合的 Angular 性能和数据绑定
- 当更新流星中的嵌套集合时,如何为更新路径传递变量
- 正在重新构造数组的嵌套集合
- 主干保存嵌套集合
- 如何处理backbone.js中的嵌套集合
- 我应该使用嵌套集合来组织我的backbone.js应用程序吗
- Symfony 2:如何处理表单中的嵌套集合
- 主干嵌套集合
- 关于使用rails和嵌套集合的指导
- Backbone.js中的嵌套集合/模型视图管理
- 模型绑定编辑器模板中的嵌套集合
- 将Backbone.js JSON响应填充到嵌套集合/模型中的嵌套集合中
- 主干循环遍历并从嵌套集合中获取值
- 更新嵌入文档(嵌套集合)
- 如何在c#中使用嵌套集合对键值对建模
- 悬停只影响嵌套集合中的单个元素