<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ASP.NET MVC基于標注特性的Model驗證:DataAnnotationsModelValidator

      對于ASP.NET MVC基于標注特性的Model驗證,很多人只知道應用在數據類型及其屬性上用于定義驗證規則和錯誤消息的ValidationAttribute。通過《ASP.NET MVC以ModelValidator為核心的Model驗證體系: ModelValidator》的介紹,我們知道了最終用于進行Model驗證的是一個叫做ModelValidator的組件。ValidationAttribute對應的ModelValidator為DataAnnotationsModelValidator,這篇簡短的文章為你介紹ASP.NET MVC是如何針對Validation來創建DataAnnotationsModelValidator,以及后者如何利用前者實施Model驗證的。[本文已經同步到《How ASP.NET MVC Works?》中]

      一、DataAnnotationsModelValidator

      ModelValidator是真正用于進行Model驗證的組件,上面介紹的驗證特性最終被封裝成DataAnnotationsModelValidator對象進而被應用到Model驗證系統中。如下面的代碼片斷所示,被封裝的ValidationAttribute通過只讀屬性Attribute表示,該屬性在構造函數中被初始化。

         1: public class DataAnnotationsModelValidator : ModelValidator
         2: {
         3:     public DataAnnotationsModelValidator(ModelMetadata metadata, ControllerContext context, ValidationAttribute attribute);
         4:     public override IEnumerable<ModelClientValidationRule>  GetClientValidationRules();
         5:  
         6:     public override IEnumerable<ModelValidationResult> Validate(object container)
         7:     {
         8:         ValidationContext validationContext = new ValidationContext(container ?? this.Metadata.Model, null, null)
         9:         {
        10:             DisplayName = this.Metadata.GetDisplayName()
        11:         };
        12:         ValidationResult validationResult = this.Attribute.GetValidationResult(this.Metadata.Model, validationContext);
        13:         if (validationResult != ValidationResult.Success)
        14:         {
        15:             ModelValidationResult iteratorVariable2 = new ModelValidationResult
        16:             {
        17:                 Message = validationResult.ErrorMessage
        18:             };
        19:             yield return iteratorVariable2;
        20:         }
        21:         else
        22:         {
        23:             yield break;
        24:         }
        25:     }
        26:     protected ValidationAttribute Attribute { get; }
        27:     protected string ErrorMessage { get; }
        28:     public override bool IsRequired { get; }
        29: }

      我們給出了用于實施驗證的核心方法Validate的完整定義。在該方法中,基于被驗證對象(如果為Null則采用Model元數據的Model屬性)創建出表示當前驗證上下文的ValidationContext對象,并采用Model元數據的DisplayName屬性作為該上下文的顯示名稱。最后直接調用被封裝的ValidationAttribute的GetValidationResult方法對指定對象實施驗證,如果返回的ValidationResult對象不為空,則以此創建ModelValidationResult對象并返回。

      順便在說說定義在DataAnnotationsModelValidator中的另外兩個受保護只讀屬性的邏輯。用于返回錯誤消息的ErrorMessage屬性來源對對ValidationAttribute的FormatErrorMessage方法的調用,而指定的參數就是當前Model元數據的DisplayName屬性。由于只有RequiredAttribute才用于必需字段的驗證,所有只有被封裝ValidationAttribute為RequiredAttribute時其IsRequired屬性返回True。

      二、DataAnnotationsModelValidator<TAttribute>

      DataAnnotationsModelValidator<TAttribute>是DataAnnotationsModelValidator的子類,其泛型參數為相應的ValidationAttribute的類型,下面的代碼片斷反映了其定義:

         1: public class DataAnnotationsModelValidator<TAttribute> : DataAnnotationsModelValidator where TAttribute: ValidationAttribute
         2: {    
         3:     public DataAnnotationsModelValidator(ModelMetadata metadata, ModelBindingExecutionContext context, TAttribute attribute);
         4:     protected TAttribute Attribute { get; }
         5: }

      作為DataAnnotationsModelValidator與相應ValidationAttribute之間的適配,ASP.NET MVC為常用的ValidationAttribute(RequiredAttribute、RangeAttribute、RegularExpressionAttribute和StringLengthAttribute)定義相應的適配類型。如下面的代碼片斷所示,它們都是泛型的DataAnnotationsModelValidator<TAttribute>的子類。當我們將這些ValidationAttribute應用到Model類型時,真正用于Model驗證的實際上就是這些作為適配的ModelValidator。

         1: public class RequiredAttributeAdapter : DataAnnotationsModelValidator<RequiredAttribute>
         2: {
         3:     public RequiredAttributeAdapter(ModelMetadata metadata, ControllerContext context, RequiredAttribute attribute);
         4:     public override IEnumerable<ModelClientValidationRule> GetClientValidationRules();
         5: }
         6:  
         7: public class RangeAttributeAdapter : DataAnnotationsModelValidator<RangeAttribute>
         8: {    
         9:     public RangeAttributeAdapter(ModelMetadata metadata, ControllerContext context, RangeAttribute attribute);
        10:     public override IEnumerable<ModelClientValidationRule> GetClientValidationRules();
        11: }
        12:  
        13: public class RegularExpressionAttributeAdapter : DataAnnotationsModelValidator<RegularExpressionAttribute>
        14: {    
        15:     public RegularExpressionAttributeAdapter(ModelMetadata metadata, ControllerContext context, RegularExpressionAttribute attribute);
        16:     public override IEnumerable<ModelClientValidationRule> GetClientValidationRules();
        17: }
        18:  
        19: public class StringLengthAttributeAdapter : DataAnnotationsModelValidator<StringLengthAttribute>
        20: {    
        21:     public StringLengthAttributeAdapter(ModelMetadata metadata, ControllerContext context, StringLengthAttribute attribute);
        22:     public override IEnumerable<ModelClientValidationRule>GetClientValidationRules();
        23: }

       

      ASP.NET MVC基于標注特性的Model驗證:ValidationAttribute
      ASP.NET MVC基于標注特性的Model驗證:DataAnnotationsModelValidator
      ASP.NET MVC基于標注特性的Model驗證:DataAnnotationsModelValidatorProvider
      ASP.NET MVC基于標注特性的Model驗證:將ValidationAttribute應用到參數上
      ASP.NET MVC基于標注特性的Model驗證:一個Model,多種驗證規則

      posted @ 2012-06-07 08:31  Artech  閱讀(6587)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 最新偷拍一区二区三区| av偷拍亚洲一区二区三区| 久久综合亚洲鲁鲁九月天| 久久精品中文字幕有码| 蜜桃成人无码区免费视频网站| 国厂精品114福利电影免费| 中国亚州女人69内射少妇| 精品无码人妻| 国产精品久久露脸蜜臀| 国产亚洲一二三区精品| 2022最新国产在线不卡a| 中文无码热在线视频| 最新国产AV最新国产在钱| 国产精品一久久香蕉国产线看观看 | 亚洲AV无码国产永久播放蜜芽 | 人人人澡人人肉久久精品| 成年无码av片在线蜜芽| 国产精品无码午夜福利| 激情伊人五月天久久综合| 亚洲综合网一区中文字幕| 国产精品福利自产拍在线观看| 小嫩批日出水无码视频免费| 亚洲欧美综合精品成人网站| 秋霞AV鲁丝片一区二区| 中国老太婆video| 国产一级r片内射免费视频| 亚洲高潮喷水无码AV电影| 免费无码又黄又爽又刺激| 国产情侣一区二区三区| 精品一卡2卡三卡4卡乱码精品视频| 久久精品国产久精国产| 国产精品第一页一区二区 | 亚洲中文字幕成人综合网| 日韩有码av中文字幕| 亚洲熟妇色自偷自拍另类| 4hu44四虎www在线影院麻豆| 99久久国产成人免费网站| 亚洲av成人久久18禁| 亚洲人成人网站色www| 欧美老少配性行为| 亚洲永久精品日本久精品|