簡體   English   中英

定制模型綁定器

[英]custom modelbinder

我想創建一個自定義modelbinder來驗證有界模型。 我已經找到了幾個這樣的例子,它可以正常工作。 但是,我也希望能夠在模型存在錯誤的情況下將用戶送回他來自的頁面。

這樣可以做到嗎,這樣做有明顯的副作用嗎?

我要實現的是控制器始終獲取有效命令,因此無需在action方法中檢查model.IsValid()。

您嘗試執行的操作看起來不錯,但無法正常工作。 限制太多了。

  1. 通常,只有控制器才能確定發生錯誤時重定向到的位置。 您可以使用其他屬性,例如[OnError(“ Action”)],但這看起來像變通辦法。
  2. 表單不會發布所有數據。 例如,下拉列表,輔助值必須由控制器填充。 您可能可以為此使用動作過濾器,但這再次看起來像是黑客。

您可以設置全局操作過濾器(在基本控制器上),該過濾器將檢查模型錯誤(綁定程序設置)並重定向(設置.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM