结合我有以下类型和类:模型嵌套子模型和PartialViews在ASP.NET MVC
namespace MVC.Models
public class Page
{
public EditableContent Content {get; set; }
}
public class EditableContent
{
public TemplateSection SidebarLeft {get; set; }
public TemplateSection SidebarRight {get; set; }
}
我想在我的Edit.aspx
视图编辑Page
实例。由于EditableContent
也附加到其他型号,我有一个PartialView
被称为ContentEditor.ascx
强类型,并采取EditableContent
的实例并呈现它。
渲染部分的所有工作正常,但是当我发布 - 我ContentEditor
里面一切都没有绑定 - 这意味着Page.Content
是null
。
在PartialView,我使用强类型HTML辅助方法来做到这一点:
<%= Html.HiddenFor(m => m.TemplateId) %>
但因为由ContentEditor.ascx
呈现在表单上输入元素没有得到Content
前缀其id
属性 - 在值不绑定到Page
。
我尝试使用松散类型的辅助方法解决此问题:
<%= Html.Hidden("Content.TemplateId", Model.TemplateId) %>
,当我对付这种东西就变得非常难看List<T>
的属性。然后我必须手动渲染集合索引。
我应该把页面和EditableContent作为参数传递给控制器动作?:
public ActionResult Edit(Page page, EditableContent content) { ... }
我缺少什么?
它的作品,老兄!谢谢。我假设EditorFor负责所有的脚手架,把所有的东西捆绑在一起。 – MartinHN 2010-03-20 22:10:22
我已经在我的一个项目上做了这个,但是你能解释为什么'Html.RenderPartial(“_ blah”,Model.Blah)'不起作用Darin?这就是我们以前的样子。 – GONeale 2011-09-05 10:08:45
@GONeale,它不起作用,因为你传递了Model.Blah,所以在部分内部你在Blah的上下文中,而不是在Model =>的上下文中,你在这个部分中使用的所有帮助器都会生成错误的输入名称。编辑器模板不同=>它们考虑父上下文并生成在其内部使用的助手会生成适当的输入名称。只要看看你的标记,你会立即看到差异。要使默认模型联编程序正常工作,您必须遵守惯例。 – 2011-09-05 10:12:10