以下面这段生成的代码为例:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Bill bill)
{
if (ModelState.IsValid)
{
db.Entry(bill).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(bill);
}我的问题是: ModelState.IsValid如何知道它应该检查Bill实体而不是另一个实体?
发布于 2013-07-03 04:44:58
在ASP.NET MVC中有一个名为DefaultModelBinder的默认模型绑定器。该类将为您定义的每个操作参数自动执行。当它试图从请求键/值字符串对实例化和填充相应的模型时,它可能会遇到这个模型绑定器简单地添加到ModelState字典中的错误。它可能会遇到错误的原因是因为您可能已经用验证属性修饰了模型。
因此,一旦代码执行进入控制器操作,如果在模型绑定期间向ModelState.IsValid属性添加了错误,则该属性将返回false。
顺便说一句,您的代码等同于以下代码(永远不要使用,仅用于说明目的):
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit()
{
Bill bill = new Bill();
if (TryUpdateModel(bill))
{
db.Entry(bill).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(bill);
}https://stackoverflow.com/questions/17435466
复制相似问题