1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      ASP.NETMVCModel驗證(五)-創(chuàng)新互聯(lián)

      ASP.NETMVC Model驗證(五)

      10年積累的網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認識你,你也不認識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有南川免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

      前言

      上篇主要講解ModelValidatorProvider和ModelValidator兩種類型的自定義實現(xiàn),然而在MVC框架中還給我們提供了其它方式來進行Model驗證,也就是本篇的主題,使用框架提供給我們的一系列的特性類型來進行Model驗證,當然也是可以自定義的,在下面的演示示例中,我會使用我們自己自定義的特性類型(繼承自ValidationAttribute類型)到自定義Model綁定器中來模擬一下實現(xiàn)。

      Model驗證

      • Model驗證簡單運用示例

      • ModelValidator使用生成過程

      • 自定義實現(xiàn)DefaultModelBinder進行驗證

      • 自定義ModelValidatorProvider 和ModelValidator

      • ValidationAttribute特性類使用

      • 自定義ValidationAttribute特性類的示例實現(xiàn)

      ValidationAttribute特性類使用

      我們首先看一下ValidationAttribute類型的定義,示例代碼1-1。

      代碼1-1

      public abstract class ValidationAttribute: Attribute
          {
              protectedValidationAttribute();
              protectedValidationAttribute(Func errorMessageAccessor);
              protectedValidationAttribute(string errorMessage);
       
              // 摘要:
              //     獲取或設(shè)置一條在驗證失敗的情況下與驗證控件關(guān)聯(lián)的錯誤消息。
              //
              // 返回結(jié)果:
              //     與驗證控件關(guān)聯(lián)的錯誤消息。
              public string ErrorMessage { get;set; }
              public string ErrorMessageResourceName { get; set; }
              public Type ErrorMessageResourceType { get; set; }
              protectedstring ErrorMessageString { get; }
              public virtual stringFormatErrorMessage(string name);
              public ValidationResult GetValidationResult(object value, ValidationContextvalidationContext);
              //
              // 摘要:
              //     確定對象的指定值是否有效。
              //
              // 參數(shù):
              //   value:
              //     要驗證的對象的值。
              //
              // 返回結(jié)果:
              //     如果指定的值有效,則為 true;否則,為 false。
              public virtual bool IsValid(object value);
              protectedvirtual ValidationResultIsValid(object value, ValidationContextvalidationContext);
              public void Validate(objectvalue, string name);
              public void Validate(objectvalue, ValidationContext validationContext);
      }

      ValidationAttribute類型就是下面示例中所有應(yīng)用在Model屬性上特性類型的基類,在上面的ValidationAttribute類型中ErrorMessage屬性表示驗證錯誤所顯示信息,IsValid()方法則是表示驗證的值是否通過,下面我們看一下框架給我們提供的Model驗證特性類的簡單示例。

      首先我們還是使用ASP.NETMVC Model驗證(一)中的示例代碼,看一下ViewModel使用了驗證特性類后的定義,示例代碼1-2.

      代碼1-2

      namespace MvcApplication.Models
      {
          ///
          /// ViewModel-用戶注冊信息
          ///
          public class RegistrationInformation
          {
              [Required]
              public string ID { get; set; }
              [Required]
              public string UserID { get; set; }
              [Required]
              [StringLength(10)]
              public string Password1 { get;set; }
              [Compare("Password1")]
              public string Password2 { get;set; }
              
              public string Name { get; set; }
          }
      }

      在代碼1-2中,我們看到了一些應(yīng)用于Model屬性上的特性類,下面簡單的說一下這幾種類型的含義。

      Required:[Required],表示此屬性不得為空(包括空字符串),當然了也可以通過設(shè)置內(nèi)部的AllowEmptyStrings屬性為true后,則視為可以為空。

      StringLength:[StringLength(10)],表示此屬性值的字符串大長度不能超過10。

      Compare:[Compare(“Password1”)],表示此屬性的值必須和指定屬性的值相同,示例中就是Password2的值必須和Password1屬性的值相同,不然就會提示驗證的錯誤信息

      下面來一下項目運行后的結(jié)果圖,

      圖1

      ASP.NETMVC Model驗證(五)

      圖1中故意輸入的這些數(shù)值,看下圖2是驗證后的結(jié)果

      圖2

      ASP.NETMVC Model驗證(五)

      自定義ValidationAttribute特性類的示例實現(xiàn)

      這一小節(jié)我們直接來看自定義Model驗證特性類型,直接來看定義的示例代碼1-3.

      代碼1-3

      namespace MvcApplication.ModelValidators
      {
          [AttributeUsage(AttributeTargets.Property,AllowMultiple=true,Inherited=false)]
          public class CustomModelValidatorAttribute:ValidationAttribute
          {
       
              public override boolIsValid(object value)
              {
                  if(string.IsNullOrEmpty((string)value)|| string.Compare((string)value,"jinyuan", true) == 0)
                  {
                      ErrorMessage = "不能為空,或名稱不合法!";
                      returnfalse;
                  }
                  else
                  {
                      returntrue;
                  }
              }
          }
      }

      這里為什么要重寫基類的IsValid()方法,可能MVC框架會調(diào)用這個方法來判斷當前值是否通過驗證,這里說一句題外話,在MVC框架中我翻看過默認綁定器類型的實現(xiàn)代碼,并沒有找到對Model驗證特性類的調(diào)用,哪位大神知道的話告知一下小弟感激不盡。

      現(xiàn)在我們再修改一下代碼1-2中的定義,示例代碼1-4.

      代碼1-4

              [CustomModelValidator]
              public string Name { get; set; }

      修改過后我們看一下結(jié)果圖3和圖4.

      圖3

      ASP.NETMVC Model驗證(五)

      圖4

      ASP.NETMVC Model驗證(五)

      看到這里,有點不死心,想模擬實現(xiàn)一下默認綁定器的內(nèi)部實現(xiàn),這部分內(nèi)容僅供參考,示例代碼1-5.

      代碼1-5

          public class CustomModelValidatorAttributeModelBinder: DefaultModelBinder
          {
              protectedoverride voidSetProperty(ControllerContextcontrollerContext, ModelBindingContextbindingContext, PropertyDescriptorpropertyDescriptor, object value)
              {
                  base.SetProperty(controllerContext,bindingContext, propertyDescriptor, value);
                  foreach(Attribute att inpropertyDescriptor.Attributes)
                  {
                      if(att is ModelValidators.CustomModelValidatorAttribute)
                      {
                          ModelValidators.CustomModelValidatorAttribute mva = att as ModelValidators.CustomModelValidatorAttribute;
                          if(!mva.IsValid(value))
                          {
                             bindingContext.ModelState.AddModelError(propertyDescriptor.Name,mva.ErrorMessage);
                          }
                      }
                  }
              }
          }

      在代碼1-5中我們根據(jù)PropertyDescriptor類型的參數(shù)獲取到應(yīng)用在Model屬性上的所有特性類,然后篩選到我們自定義的類型,進行一個驗證判斷然后將其錯誤信息添加到ModelState中,需要把我們自定義的這個Model綁定器注冊到系統(tǒng)中,運行的時候按照圖3的輸入,結(jié)果就跟圖4一樣。同樣的都能實現(xiàn)功能,這里只是讓大家對默認的綁定器營造個遐想的空間。

      另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


      標題名稱:ASP.NETMVCModel驗證(五)-創(chuàng)新互聯(lián)
      本文地址:http://www.ef60e0e.cn/article/dgseso.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        古田县| 视频| 大邑县| 淮北市| 武宁县| 开阳县| 潮安县| 阿鲁科尔沁旗| 五家渠市| 界首市| 衢州市| 岐山县| 大竹县| 临泽县| 大港区| 阳泉市| 东台市| 黎川县| 舞阳县| 太仆寺旗| 古蔺县| 资源县| 马公市| 清河县| 宁夏| 宜兰市| 手游| 富民县| 巴南区| 枣庄市| 杂多县| 炎陵县| 梧州市| 三江| 鄂尔多斯市| 隆子县| 淮北市| 扎赉特旗| 乌拉特后旗| 清流县| 杨浦区|