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

4

我希望您能够正确绑定嵌套模型和嵌套视图,但是没有成功。

以下是详细说明:

这是类:

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个回答

4

我有一个解决方法。

如果你将完整的视图模型传递到局部视图中,然后直接从顶级模型引用子对象,那么就没问题了。

不过我还是想听听其他人是怎么做的。


2

我正在使用MVC 3,仍然存在同样的问题,转向不理想的继承方式。如果有人知道更好的方法,请发布出来。


0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接