結合我有以下類型和類:模型嵌套子模型和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