0

以这段生成的代码为例:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(Bill bill)
    {
        if (ModelState.IsValid)
        {
            db.Entry(bill).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(bill);
    }

有一个名为“Bill”的模型,为它设置了一些 [必需] 属性。

我的问题是:ModelState.IsValid 怎么知道它应该检查 Bill 实体而不是另一个实体?

4

1 回答 1

1

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);
}
于 2013-07-02T20:44:57.903 回答