【发布时间】:2012-02-11 05:34:45
【问题描述】:
我对 ASP.NET MVC 3 中的一个问题感到困惑 - 从单个 MVC 视图处理主从关系的编辑和更新。
我正在使用 Entity Framework 4.2 代码优先来构建一个小应用程序。它使用Person 类(具有Name、FirstName 等)和Address 类(具有Street、Zipcode、City 等)。
这两个类彼此之间具有 m:n 关系,在 EF 代码优先中建模:
public class Person
{
private List<Address> _addresses;
// bunch of scalar properties like ID, name, firstname
public virtual List<Address> Addresses
{
get { return _addresses; }
set { _addresses = value; }
}
}
public class Address
{
private List<Person> _people;
// bunch of scalar properties like AddressID, street, zip, city
public virtual List<Person> People
{
get { return _people; }
set { _people = value; }
}
}
我用一些数据手动填充了数据库,并且使用 EF 4.2 检索数据工作得很好。
我有一个 ASP.NET MVC PersonController,我在其中加载了一个 Person,包括其所有当前地址,并使用 Razor 视图显示它。我想允许用户更改或更新现有地址,以及删除或插入地址。控制器从 WCF 服务获取该人的数据,如下所示:
public ActionResult Edit(int id)
{
Person person = _service.GetPerson(id);
return View(person);
}
并且检索时该人的地址已正确填写。
此视图工作正常 - 它按预期显示来自 Person 实例的所有数据。
@model DomainModel.Person
<h2>Edit</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Person</legend>
@Html.HiddenFor(model => model.PersonId)
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
.... and a few more of those scalar properties being edited....
<hr/>
<h4>Addresses</h4>
@foreach (var item in Model.Addresses)
{
<tr>
<td>
@Html.EditorFor(modelItem => item.Street)
</td>
<td>
@Html.EditorFor(modelItem => item.ZipCode)
</td>
<td>
@Html.EditorFor(modelItem => item.City)
</td>
</tr>
}
<hr/>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
但是,当我在保存正在编辑的人时尝试处理 POST 时,我似乎无法访问视图中显示(并且可能已编辑)的地址:
[HttpPost]
public ActionResult Edit(Person person)
{
if (ModelState.IsValid)
{
_service.UpdatePerson(person);
return RedirectToAction("Index");
}
return View(person);
}
在这种情况下,person.Addresses 属性始终为 null。嗯....我错过了什么?如何在 ASP.NET MVC 视图上编辑人员到地址的关系,并从我的视图中取回 Person AND 与其关联的 Addresses,以便我可以将它们传递给 EF将它们保存回数据库表?
【问题讨论】:
标签: asp.net-mvc-3 sql-server-2008 entity-framework-4 ef-code-first master-detail