我正在设计可以接收对象的ASP.NET MVC应用程序中的表单。下面是一个典型编辑动作的样子:更新来自表单的LINQ模型的最佳方式
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, Person person)
{
peopleService.SavePerson(person);
return Redirect("~/People/Index");
}
的SavePerson
呼叫服务做到这一点:
public void SavePerson(Person person)
{
_peopleRepository.SavePerson(person);
}
而且SavePerson
调用存储库中的做到这一点:
public void SavePerson(Person person)
{
using (var dc = new SIGAPDataContext())
{
if (person.IsNew)
{
dc.People.InsertOnSubmit(person);
}
else
{
dc.People.Attach(person, true);
}
dc.SubmitChanges();
}
}
现在,这在我创建新记录时效果很好。但是,当我更新它没有所有的表单元素时,它会删除其他字段。例如,我的Person模型有一个NationalityID属性,如果它没有显示在编辑表单上,则该属性为空。
什么是最好的做法,使模型更新只是来自表单的字段?我必须首先从数据库中的记录和更新手动的属性,如:
Person persistedPerson = peopleService.GetPerson(person.ID);
persistedPerson.Name = person.Name;
persistedPerson.DateOfBirth = person.DateOfBirth
// etc...
或有任何其他的,更清洁的方式做到这一点?
现在我只需要如何使用UpdateModel在窗体上使用嵌套实体。非常感谢! – changelog 2009-02-27 18:12:52