我使用PRG使用一個動作過濾器在MVC清理行動後在MVC
清理我的帖子在POST操作我存放在TempData的控制器的ModelState,然後重定向到GET方法,重新加載模型狀態。
GET和POST操作標題:
[ImportModelStateFromTempData]
public ActionResult Details(int id) {
var object = load(id);
return View(object);
}
[HttpPost]
[ExportModelStateToTempData]
public ActionResult Details(MyViewModel model) {
update(model); return RedirectToAction("Details", new { id = model.id })
}
如果發生錯誤,我在後動作我添加錯誤到無效的ModelState中,然後重定向到付諸行動的ModelState中。
我的問題是我怎樣才能最好地確定,在GET「Details」操作中,模型在帖子後處於錯誤狀態?如果模型狀態無效,我想跳過邏輯...
var object = load(id);
在GET操作中。我試過ModelState.IsValid,但這不起作用。
你可以問的ModelState如果有效(將基於數據註解檢查本身):如果(ModelState.IsValid!){//做你的事}。你也可以爲「特殊」驗證添加你自己的模型狀態錯誤:ModelState.AddModelError(yourProperty,aMessage); ..雖然我不確定我是否確實理解你的問題。 –
@ Team-JoKi他正在使用一個動作過濾器從POST請求導入TempData,以便遵循PRG模式。 POST到一個動作和ModelState是有效的,在TempData中推送模型狀態,然後重定向到GET動作,然後導入該模型狀態,以便表單具有適當的驗證器突出顯示等。 – Dismissile
不應該只測試「if modelState .IsValid ...做重定向「別的只是將模型返回到你所在的視圖?你想在運行任何更新之前測試合法性 –