【发布时间】:2010-12-02 02:42:27
【问题描述】:
假设我有类似的 ViewModel
public class AnotherViewModel
{
public string Name { get; set; }
}
public class MyViewModel
{
public string Name { get; set; }
public AnotherViewModel Child { get; set; }
public AnotherViewModel Child2 { get; set; }
}
在视图中,我可以使用
渲染部分视图<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
部分我会做
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
但是,问题是两者都会呈现 name="Name" 而我需要 name="Child.Name" 才能使模型绑定器正常工作。或者,当我使用相同的局部视图呈现第二个属性时,name="Child2.Name"。
如何让我的局部视图自动识别所需的前缀?我可以将它作为参数传递,但这太不方便了。例如,当我想以递归方式渲染它时,情况就更糟了。有没有办法用前缀渲染部分视图,或者更好的是,自动重新调整调用的 lambda 表达式,以便
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
将自动添加正确的“孩子”。生成的名称/ID字符串的前缀?
我可以接受任何解决方案,包括 3 方视图引擎和库 - 我实际上使用 Spark View Engine(我使用它的宏“解决”问题)和 MvcContrib,但在那里没有找到解决方案。 XForms、InputBuilder、MVC v2 - 任何提供此功能的工具/见解都会很棒。
目前我正在考虑自己编写代码,但这似乎是在浪费时间,我不敢相信这些琐碎的东西还没有实现。
可能存在很多手动解决方案,我们欢迎所有这些解决方案。例如,我可以强制我的部分基于 IPartialViewModel
更新:有一个类似的问题没有答案here。
【问题讨论】:
标签: asp.net-mvc spark-view-engine mvccontrib