[英]custom modelbinder
我想創建一個自定義modelbinder來驗證有界模型。 我已經找到了幾個這樣的例子,它可以正常工作。 但是,我也希望能夠在模型存在錯誤的情況下將用戶送回他來自的頁面。
這樣可以做到嗎,這樣做有明顯的副作用嗎?
我要實現的是控制器始終獲取有效命令,因此無需在action方法中檢查model.IsValid()。
您嘗試執行的操作看起來不錯,但無法正常工作。 限制太多了。
您可以設置全局操作過濾器(在基本控制器上),該過濾器將檢查模型錯誤(綁定程序設置)並重定向(設置.Result)。 但這很麻煩,並且需要太多額外的“代碼”(屬性)等,因此很難跟蹤並與真實的應用程序邏輯相關聯。 當您不僅僅需要簡單的動作名稱來進行錯誤重定向時,它很快就會變得過於嚴格(請參見泄漏抽象定律)。
像這樣完成時,這看起來要簡單得多:
public ActionResult PostAction(ViewModel data)
{
if (!ModelState.IsValid)
return View("GetAction", data.WithDropDownList(repository.GetProducts()));
}
在上面的示例中,控制器完全可以控制工作流程。 它還具有執行附加驗證/設置的自由。 您仍然可以使用盡可能多的基礎結構-模型綁定程序以提供ModelState錯誤等-但只有控制器才應對輸入和輸出擁有最終決定權。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.