创建一个仅包含用户将在网页上输入的那些属性的对象,将其用于控制器中的绑定(bind),然后映射到完整的实体对象是否有意义?或者你应该只使用实体对象,并使用 Include 和 Exclude 来限制输入的内容?
最佳答案
我开始喜欢使用接口(interface)来隔离更新对象时应包含哪些属性的想法。
例如:
创建和更新人物对象:
interface ICreatePerson
{
string Name { get; set; }
string Sex { get; set; }
int Age { get; set; }
}
interface IUpdatePerson
{
string Name { get; set; }
}
class Person : ICreatePerson, IUpdatePerson
{
public int Id { get; }
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
}
然后,在绑定(bind)模型时,只需使用适当的接口(interface)作为类型,它只会更新名称属性。
这是一个示例 Controller 方法:
public ActionResult Edit(int id, FormCollection collection)
{
// Get orig person from db
var person = this.personService.Get(id);
try
{
// Update person from web form
UpdateModel<IUpdatePerson>(person);
// Save person to db
this.personService.Update(person);
return RedirectToAction("Index");
}
catch
{
ModelState.AddModelErrors((person.GetRuleViolations());
return View(person);
}
}
参见 this article (和评论)对选项进行了很好的讨论。
关于asp.net-mvc - 在 asp.net mvc 绑定(bind)中使用 Include 和 Exclude 或创建一个新的子集对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749761/