【发布时间】:2011-09-19 22:22:59
【问题描述】:
我想使用 ModelState.AddModelError() 在 ASP.MVC 3 输入表单中向用户显示错误,以便它自动突出显示正确的字段并将错误放在特定字段旁边。
在大多数示例中,我看到 ModelState.AddModelError() 和 if(ModelState.IsValid) 直接放在控制器中。但是,我想将该验证逻辑移动/集中到模型类中。我可以让模型类检查模型错误并填充 ModelState.AddModelError() 吗?
当前代码:
// Controller
[HttpPost]
public ActionResult Foo(Bar bar)
{
// This model check is run here inside the controller.
if (bar.isOutsideServiceArea())
ModelState.AddModelError("Address", "Unfortunately, we cannot serve your address.");
// This is another model check run here inside the controller.
if (bar.isDuplicate())
ModelState.AddModelError("OrderNumber", "This appears to be a duplicate order");
if (ModelState.IsValid)
{
bar.Save();
return RedirectToAction("Index");
}
else
return View(bar)
}
所需代码:
// Controller
[HttpPost]
public ActionResult Foo(Bar bar)
{
// something here to invoke all tests on bar within the model class
if (ModelState.IsValid)
{
bar.Save();
return RedirectToAction("Index");
}
else
return View(bar)
}
...
// Inside the relevant Model class
if (bar.isOutsideServiceArea())
ModelState.AddModelError("Address", "Unfortunately, we cannot serve your address.");
if (bar.isDuplicate())
ModelState.AddModelError("OrderNumber", "This appears to be a duplicate order");
【问题讨论】:
-
您想要做的不仅仅是像RequiredAttribute 这样的通用DataAnnotations 对吗?
-
其实我用的DataAnnotations还是蛮多的,但是有些错误必须在运行时计算。我们的通用模型有一些在数据库中配置和存储并在运行时应用的变体。
-
到目前为止,我只能通过从控制器调用该方法或在模型中使用 DataAnnotations 使其工作。还没弄清楚如何在模型类中运行一些逻辑并调用 AddModelError()
标签: asp.net-mvc