通常我会在将数据提交到数据库之前在操作方法中验证我的模型。
[HttpPost]
public ActionResult MyActionMethod(MyModelType model){
if (ModelState.IsValid){
//commit changes to database...
return View("SuccessView",model);
}
return View(model);
}
但在极少数情况下,我需要在提交模型时在业务层执行一些额外的验证。如果发生验证错误,我想在业务层中引发异常并使用该异常返回带有验证错误的视图。
我正在寻找一种方法来实现这一点,而无需更改控制器中的任何代码。所以我正在寻找一种方法来避免这种情况:
[HttpPost]
public ActionResult MyActionMethod(MyModelType model){
if (ModelState.IsValid){
try {
//commit changes to database...
} catch (ValidationException e){
ModelState.AddModelError(...);
return View(model);
}
return View("SuccessView",model);
}
return View(model);
}
有没有办法做到这一点?
我正在考虑一个动作过滤器,它可以捕获 ValidationExceptions 并在常规[HandleError]
过滤器启动之前返回带有验证错误的合适视图。这样的事情可能吗?
编辑:我刚刚找到了解决方案(见下文),但直到 48 小时过去后我才能将其标记为正确答案......