ASP.NET MVC 1.0嵌套模型与部分视图

时间:2010-05-12 17:15:32

标签: c# asp.net-mvc

我正在尝试使嵌套模型与嵌套视图正确绑定但是没有运气。

这是一个详细的外观

这是班级

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。

我做错了什么?

3 个答案:

答案 0 :(得分:4)

我有一个解决方法。

如果您将完整视图模型传递到局部模型,然后从顶部模型直接引用子对象,那么您将没事。

我仍然想听听其他人是如何做到这一点的。

答案 1 :(得分:2)

我在MVC 3上,仍然有同样的问题,转而使用不太理想的继承。如果有人知道更好的方式,请发布。

答案 2 :(得分:0)

我使用下面的代码解决了它。问题是,为部分视图模板生成的ID不符合MVC模型绑定规则。因此,请尝试使用部分视图的变体,如下所示。

<% Html.RenderPartial("MyPartialView", Model.AnotherClass, new ViewDataDictionary(){
    TemplateInfo = new TemplateInfo() {
        HtmlFieldPrefix = "AnotherClass"
    }
}); %>