通常我在将数据提交给数据库之前,在动作方法中验证我的模型。我可以从操作过滤器返回操作结果吗?
[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小时过去了,以纪念这是正确的答案...
非常好,直到现在还不知道这个扩展点! – Oliver 2013-05-09 11:00:12