我想創建一個自定義模型綁定器來驗證有界模型。我發現了幾個這樣的例子,它的工作原理應該如此。但是,如果模型中存在錯誤,我還希望能夠將用戶發回到他來自的頁面。自定義模型綁定器
這樣做是否可行?是否有任何明顯的副作用?
我想要實現的是控制器總是獲取有效的命令,所以我不需要檢查action.Method中的model.IsValid()。
我想創建一個自定義模型綁定器來驗證有界模型。我發現了幾個這樣的例子,它的工作原理應該如此。但是,如果模型中存在錯誤,我還希望能夠將用戶發回到他來自的頁面。自定義模型綁定器
這樣做是否可行?是否有任何明顯的副作用?
我想要實現的是控制器總是獲取有效的命令,所以我不需要檢查action.Method中的model.IsValid()。
你試圖做的看起來不錯,但它不會工作。限制太多了。
您可以設置將檢查模型錯誤(活頁夾設置)和重定向(setup.Result)的全局操作過濾器(在基本控制器上)。但是這很複雜,需要太多額外的「代碼」 - 屬性等,這些很難跟蹤並與真實的應用程序邏輯相關聯。它變得過於嚴格很快(見漏抽象法),當你需要不出錯重定向只是簡單的動作名稱等
這看起來多簡單,當這樣做:
public ActionResult PostAction(ViewModel data)
{
if (!ModelState.IsValid)
return View("GetAction", data.WithDropDownList(repository.GetProducts()));
}
在上面的例子中,控制器可以控制工作流程,就像它應該那樣。它也有自由執行額外的驗證/設置。你仍然可以使用盡可能多的基礎設施 - 模型粘合劑來提供模型狀態錯誤等 - 但只有控制器應該對輸入和輸出做出最終決定。
你是對的,它的控制者應該處理這些錯誤,我會堅持我的驗證模型構建器並讓控制器處理這個動作。 – walie 2010-06-28 06:00:15
您可以分享您已閱讀的文章,並顯示您目前爲止的代碼嗎? – 2010-06-26 08:50:30
達林,我不能分享我的代碼atm,但這裏有一篇關於它的文章。 http://schotime.net/blog/index.php/2009/05/11/fluent-validation-model-binder-aspnet-mvc/我不使用Fluent驗證,但概念是相同的。 – walie 2010-06-28 06:02:24