我正在使用 EF5 Code First:
public class Scenario
{
public int Id { get; set; }
public IList<Client> Clients { get; set; }
}
public class Client
{
public int Id { get; set; }
public string Name {get;set;}
public int VisibilityNumber{ get; set; }
}
我直接将场景对象发送到视图(MVC4,不使用视图模型类 - 可能是一个错误?,但管道代码少了很多)。在我看来,我对 Scenario.Id 使用 HiddenFor,并使用 for 循环为每个客户端 VisibilityNumber 显示一个 EditFor。
这是控制器:
[HttpPost]
public ActionResult Edit(int id, FormCollection formValues)
{
if (ModelState.IsValid)
{
Scenario scen=GetScenarioFromDB(id);
TryUpdateModel(scen,formValues);
if (ModelState.IsValid)
SaveToDb(scen);
}
}
在 TryUpdateModel 之后,对于每个 Clients 对象(从 DB 中正确加载):
- VisibilityNumber 设置正确
- id设置为0,当然是坏事
- 名称设置为空
查看 MVC 源代码(DefaultModelBinder/UpdateCollection)后,我可以看到在绑定到集合时,总是会创建新项目。如果我不能解决这个问题,我想我将使用 viewModel 和 AutoMapper。我假设 MVC 团队想强迫我们使用 viewModel,而不是直接发送 EF 对象。