MVC用于Model驗證的四種ModelValidator,那麼這些ModelValidator是如何被建立的呢?ASP.NET
目錄 一、ModelValidatorProvider 二、DataAnnotationsModelValidator 三、ClientDataTypeModelValidatorProvider 四、DataErrorInfoModelValidatorProvider
由于ValueProvider提供的資料值僅限于簡單類型,是以針對複雜類型的Model綁定采用一個遞歸的過程對作為Model對象的所有屬性進行綁定。Model驗證可以看成是Model綁定的後續環節,它對綁定的資料實施驗證,是以Model驗證也是一個遞歸的過程,它采用基于屬性的驗證規則對綁定的屬性值實施驗證。GetValidators方法具有兩個參數,類型ModelMetadata的metadata參數用于或者相應的驗證規則,而參數context則是表示目前Model綁定上下文的ModelBindingExecutionContext對象。
為了讓讀者更好地了解DataErrorInfoModelValidator的驗證規則,以及定義在DataErrorInfoPropertyModelValidator中針對它的提供機制,我們來示範一個簡單的執行個體。在通過Visual
Studio的ASP.NET MVC項目模闆建立的空Web應用中我們定義了如下一個實作了IDataErrorInfo接口的Contact類型。
然後建立了如下一個預設的HomeController類。在Action方法Index中,我們通過DataErrorInfoModelValidatorProvider根據Contact類型極其屬性的Model中繼資料建立了一個ModelValidator清單,然後使用這個清單中的每個具體的ModelValidator對一個Contact對象實施驗證,并将ModelValidator的類型和作為驗證結果的ModelValidationResult對象的ErrorMessage屬性呈現出來。
上面的程式運作之後會在浏覽器中呈現出如下所示的輸出結果,從中可以看到針對Contact類型的Model中繼資料建立的是一個DataErrorInfoClassModelValidator,而針對其屬性的Model中繼資料建立的則是一個DataErrorInfoPropertyModelValidator對象。前者對Contact對象本身實施驗證,并将Error屬性作為驗證結果的錯誤消息;後者針對應的屬性實施驗證,驗證結果的錯誤消息來源于将屬性名稱作為索引的值。
<a href="http://www.cnblogs.com/artech/archive/2012/06/01/model-validator-01.html">ASP.NET MVC以ModelValidator為核心的Model驗證體系: ModelValidator</a>
<a href="http://www.cnblogs.com/artech/archive/2012/06/02/model-validator-02.html">ASP.NET MVC以ModelValidator為核心的Model驗證體系: ModelValidatorProvider</a>
<a href="http://www.cnblogs.com/artech/archive/2012/06/03/model-validator-03.html">ASP.NET MVC以ModelValidator為核心的Model驗證體系: ModelValidatorProviders</a>
作者:蔣金楠
微信公衆賬号:大内老A
如果你想及時得到個人撰寫文章以及著作的消息推送,或者想看看個人推薦的技術資料,可以掃描左邊二維碼(或者長按識别二維碼)關注個人公衆号(原來公衆帳号蔣金楠的自媒體将會停用)。
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
<a href="http://www.cnblogs.com/artech/archive/2012/06/02/model-validator-02.html" target="_blank">原文連結</a>