我正在尝试使嵌套模型与嵌套视图正确绑定但是没有运气。
这是一个详细的外观
这是班级
public class Foo
{
public AnotherClass AnotherClass { get; set; }
public string Name { get; set; }
public ......
}
在AnotherClass内部,我们有更多的子对象,例如
public class AnotherClass
{
public AThirdClass { get; set; }
}
第三个类具有我们想要绑定的属性。
public class AThirdClass
{
public string ImportantString { get; set; }
public string SecondString { get; set; }
}
主视图期待一个类型为Foo的类。在该视图内部,我们调用html帮助器来呈现部分视图,该视图需要传入的类型为AnotherClass的模型。调用将是
<% Html.RenderPartial("MyPartialView", Model.AnotherClass); %>
在局部视图MyPartialView中,我们有用于编辑AThirdClass字段的文本框,它们设置如下
<%= Html.TextBox("AThirdClass.ImportantString", Model.AThirdClass.ImportantString) %>
当我们回发到服务器时,我将丢失在文本框中输入的所有数据。 MVC 1.0中是否不支持此功能?如果我在使用嵌套对象时没有任何部分视图,我可以使用这种技术吗?
在MVC 2.0中,您可以使用EditorFor HTML帮助程序来执行我需要执行的操作,但是我仍然坚持使用MVC 1.0。
我做错了什么?
答案 0 :(得分:4)
我有一个解决方法。
如果您将完整视图模型传递到局部模型,然后从顶部模型直接引用子对象,那么您将没事。
我仍然想听听其他人是如何做到这一点的。
答案 1 :(得分:2)
我在MVC 3上,仍然有同样的问题,转而使用不太理想的继承。如果有人知道更好的方式,请发布。
答案 2 :(得分:0)
我使用下面的代码解决了它。问题是,为部分视图模板生成的ID不符合MVC模型绑定规则。因此,请尝试使用部分视图的变体,如下所示。
<% Html.RenderPartial("MyPartialView", Model.AnotherClass, new ViewDataDictionary(){
TemplateInfo = new TemplateInfo() {
HtmlFieldPrefix = "AnotherClass"
}
}); %>