程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET MVC以ModelValidator為核心的Model驗證體系:ModelValidatorProviders

ASP.NET MVC以ModelValidator為核心的Model驗證體系:ModelValidatorProviders

編輯:關於ASP.NET

前面篇文章我們分別介紹用真正用於實施Model驗證的ModelValidator(《ASP.NET MVC以ModelValidator為核心的Model驗證體系: ModelValidator》),以及用於提供ModelValidator的ModelValidatorProvider(《ASP.NET MVC以ModelValidator為核心的Model驗證體系: ModelValidatorProvider》),那麼對於ASP.NET MVC的Model驗證體系來說,最終是通過怎樣的方式對ModelValidatorProvider進行注冊,又是如何利用它們來創建相應的ModelValidator來實施Model驗證的呢?這就是本篇文章論述的重點。

一、ModelValidatorProviders

我們通過靜態類型ModelValidatorProviders對ModelValidatorProvider進行注冊。如下面的代碼片斷所示,ModelValidatorProviders具有一個靜態只讀屬性Providers,其類型為ModelValidatorProviderCollection,表示注冊的基於整個Web應用范圍的ModelValidatorProvider列表。

   1: public static class ModelValidatorProviders
2: {
3: public static ModelValidatorProviderCollection Providers { get; }
4: }
5:
6: public class ModelValidatorProviderCollection : Collection<ModelValidatorProvider>
7: {
8: public ModelValidatorProviderCollection();
9: public ModelValidatorProviderCollection(IList<ModelValidatorProvider> list);
10: public IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context);
11: }

值得一提的是,ModelValidatorProviderCollection定義了一個GetValidators方法用於返回一個通過集合中每個ModelValidatorProvider創建的ModelValidator集合。在這個方法中,指定的Model元數據和Controller上下文會被傳入每個ModelValidatorProvider對象的GetValidators方法,得到的每個ModelValidator對象將會作為最終返回的ModelValidator集合的元素。

在默認的情況下,通過ModelValidatorProviders的Providers表示注冊的ModelValidatorProvider列表會包含三個對象,對應著我們前面介紹的三種ModelValidatorProvider類型,即DataAnnotationsModelValidatorProvider、ClientDataTypeModelValidatorProvider和DataErrorInfoPropertyModelValidator。

如果我們需要添加一個自定義ModelValidatorProvider,可以直接將相應的對象添加到ModelValidatorProviders的Providers列表中。如果需要采用自定義ModelValidatorProvider來替換掉現有的ModelValidatorProvider,比如我們創建了一個擴展的DataAnnotationsModelValidatorProvider,還需要將現有的ModelValidatorProvider從該列表中移除。

實現在ModelValidatorProvider中的ModelValidator提供機制是基於Model元數據和Controller上下文的,實際上用於描述Model元數據的ModelMetadata類型同樣定義了一個GetValidators方法用於根據指定的Controller上下文的所有ModelValidator對象。如下面的代碼片斷所示,該方法直接調用了通過ModelValidatorProviders的Providers屬性表述的ModelValidatorProviderCollection對象的同名方法。

   1: public abstract class ModelValidator
2: {
3: //其他成員
4: public virtual IEnumerable<ModelValidator> GetValidators(ControllerContext context)
5: {
6: return ModelValidatorProviders.Providers.GetValidators(this, context);
7: }
8: }

二、ModelValidator、ModelValidatorProvider和ModelValidatorProviders

上面我們介紹用於進行Model驗證的ModelValidator,用於提供ModelValidator的ModelValidatorProvider,以及用於注冊ModelValidatorProvider的ModelValidatorProviders,整個ModelValidator的提供機制以此三類組件為核心,下圖所示的UML體現了它們之間的關系。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved