【发布时间】:2009-02-27 17:40:00
【问题描述】:
我正在我的 ASP.NET MVC 应用程序中设计将接收对象的表单。典型的编辑操作如下所示:
[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...
或者还有其他更清洁的方法吗?
【问题讨论】:
标签: c# asp.net-mvc linq