Enterprise Library 4.1--實體驗證程式塊

m53469發表於2021-09-09

實體驗證的作用簡單來講,就是從服務端對資料進行驗證。(特別是對資料安全性要求比較高的應用,這是十分必要的)

廢話不說了,直接講下使用步驟:(因為我是做web開發的,主要是講解asp.net環境中的使用)

1.先新增Microsoft.Practices.EnterpriseLibrary.Validation.dll的引用

2.最基本的使用方法(也是我最不喜歡的一種方式),直接在實體類上透過新增特性實現

實體類如下:

public class Person
{       

    [StringLengthValidator(2, 12, MessageTemplate = "請輸入2-12位長度的字元")]          
    public string Name
    {
        set;
        get;
    }

    [RegexValidator(@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*", MessageTemplate = "請輸入有效的Email地址")]
    public string Email
    {
        set;
        get;
    }
}

該方式必須在原有程式碼幾乎每個欄位上都要修改,而且這種硬編碼的寫法比較暈(何況對於linq to sql這類東東,修改dbml後使用者所做的修改都會丟失)  3.然後就可以驗證了,程式碼如下:

using System;
using Microsoft.Practices.EnterpriseLibrary.Validation;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;

protected void Page_Load(object sender, EventArgs e)
{
    Person _p = new Person() { Name = "1", Email = "jimmy.yang#126.com" };

    ValidationResults _results = Validation.Validate(_p); 
    
    if (!_results.IsValid)
    {
    foreach (ValidationResult vr in _results)
    {
        Response.Write(string.Format("錯誤位置:{0};原因:{1}
", vr.Key, vr.Message));
    }
    }
}

對於步驟2中提到的不便之處,幸好EnLib還提供了另一種方式,允許使用者把驗證規則放在配置檔案中,步驟如下:(a)先在web.config上右擊,選擇Edit Enterprise Libaray Configuration

圖片描述
(b)新建一個Validataion Application Block
圖片描述

(c)new-->Type-->Load From File... 選擇實體類所在的DLL(如果實體類沒有分層構架,先把專案編譯一下,直接選擇專案bin目錄下的dll)不過在使用過程中,發現一個bug:如果進行這一步前未編譯生成dll,或者進到這一步後,又修改了實體類,配置工具好象反射時,始終不能重新整理出最新的實體類,解決辦法:關掉vs,重新開啟再選擇dll就正常了,不知道這是不是我機器上的個別現象
圖片描述圖片描述

 (d)new-->Rule Set --> new --> Choose Members-->選擇要驗證的成員

圖片描述

  (e)新增驗證規則

圖片描述 

(f)設定Person的預設規則

圖片描述

Ok了,這下所有驗證規則都被放到web.config中了,以下是web.config中的相關節點

          name="ValidateTest.Person">
      
        
          
                          messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.NotNullValidator, 
Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral"
              name="Not Null Validator" />
                          upperBoundType="Inclusive" negated="false" messageTemplate="名字必須是2到12個字元"
              messageTemplateResourceName="" messageTemplateResourceType=""
              tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.StringLengthValidator, Microsoft.Practices.EnterpriseLibrary.Validation, 
Version=4.1.0.0, Culture=neutral"
              name="String Length Validator" />
          

          
                          options="None" patternResourceName="" patternResourceType=""
              messageTemplate="請輸入有效的電子郵件地址" messageTemplateResourceName=""
              messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RegexValidator, 
Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral"
              name="Regex Validator" />
          

        

      

    
  


以後要修改驗證規則,只需要修改web.config即可,相對更靈活一些,但是這樣有一個問題,隨著要驗證的類越來越多,web.config會越來越龐大,其實可以把驗證規則單獨放到另一個檔案裡,只需要在web.config上做些修改即可,注意下面的高亮部分


     
    


    圖片描述
  
  
    
      
    

  

圖片描述

上面第二段中的filePath=... 即表示把驗證規則放到config目錄下的validate.config中 接下來直接新建一個config目錄,然後把validate.config放在裡面就可以了,validate.config內容如下:


  
    


    

  
  
          name="ValidateTest.Person">
      
        
          
                          options="None" patternResourceName="" patternResourceType=""
              messageTemplate="請輸入正確的電子郵件地址" messageTemplateResourceName=""
              messageTemplateResourceType="" tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.RegexValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral"
              name="Regex Validator" />
          

          
                          upperBoundType="Inclusive" negated="true" messageTemplate="名字長度為2-12個字元"
              messageTemplateResourceName="" messageTemplateResourceType=""
              tag="" type="Microsoft.Practices.EnterpriseLibrary.Validation.Validators.StringLengthValidator, Microsoft.Practices.EnterpriseLibrary.Validation, Version=4.1.0.0, Culture=neutral"
              name="String Length Validator" />
          

        

      

    
  

最後再講一點廢話,QuickStarts中有一個關於asp.net的驗證示例,裡面的效果類似於常規的驗證控制元件,不過是要頁面提交後,由服務端再返回的,個人覺得這樣效率太低,我傾向於先在頁面上做客戶端驗證並給出相關出錯提示,然後再到服務端程式碼裡用文中所提的方法來驗證,所以這個示例涉及的內容就不準備研究了,大家有興趣的話,可以自行去look look這個例子

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2819/viewspace-2801272/,如需轉載,請註明出處,否則將追究法律責任。

相關文章