我正在尝试让模型绑定表单中的子类。
我有一个带有相关PageContent类的Page类。 Page对象中有许多PageContent对象。 即Page.PageContents
我将Page作为模型返回,我可以看到所有的PageContent项目。
但是我对如何将PageContent项目分配给表单有点模糊,因此它会保持模型绑定。
当我将Page模型发布回控制器时,PageContent列表为空。
以下是表单的摘录:
<% using (Html.BeginForm("SavePage", "Admin")) {%>
<fieldset>
<legend>Fields</legend>
<%=Html.Hidden("PageId", Model.PageId) %>
<p>
<label for="Title">Title:</label>
<%= Html.TextBox("Title", Model.Title) %>
<%= Html.ValidationMessage("Title", "*") %>
</p>
<p>
<label for="SysName">SysName:</label>
<%= Html.TextBox("SysName", Model.SysName) %>
<%= Html.ValidationMessage("SysName", "*") %>
</p>
<%
int i = 0;
foreach (var pageContent in Model.PageContents)
{ %>
<div>
<%=Html.Hidden("PageContents[" + i + "].PageContentId", pageContent.PageContentId) %>
<%=Html.TextArea("PageContents[" + i + "].Content", pageContent.Content)%>
</div>
<%
i++;
} %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
我想我没有正确地制作表格的PageContents方面。
编辑: 这是我POST的基本控制器方法:
public ActionResult SavePage(Page page)
{
// do stuff with page.PageContents
return View("PageEdit", page);
}
我没有使用Request.Form样式
请帮助:D
答案 0 :(得分:1)
您说Page.PageContents
是EntitySet<PageContent>
并且您正在使用自动生成的类。所以,我想,你正在使用LINQ to SQL?如果是这样,那么您可以使用partial
类来向生成的类添加属性
我记得我有一个类似的问题,我无法绑定到EntitySet<T>
属性。我想我通过使用代理/占位符属性来修复它,这是一个有效设置实际属性的IList<T>
。所以,在你的情况下,这看起来像这样:
// Your partial class, adding a property to the generated class
public partial class Page
{
// Bind to this property
public IList<PageContent> MyPageContents
{
set
{
var set = new EntitySet<PageContent>();
set.AddRange(value);
PageContents = set;
}
get { return PageContents; }
}
}
// This and probably a lot more is created by LINQ to SQL
public partial class Page {
// ...
public EntitySet<PageContent> PageContents
{
get;
set;
}
// ...
}
我认为partial
类必须与自动生成的类位于同一名称空间中。更多信息:Adding new methods to LINQ to SQL generated classes
然后,在您的表单中,绑定到MyPageContents(当然可以使用更好的名称)而不是PageContents。
希望它适合你,自从我上次使用LINQ to SQL以来已经很久了。