通常我在將數據提交給數據庫之前,在動作方法中驗證我的模型。我可以從操作過濾器返回操作結果嗎?
[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