程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> Asp.Net MVC雜談之:—步步打造表單驗證框架(1)

Asp.Net MVC雜談之:—步步打造表單驗證框架(1)

編輯:關於ASP.NET

在Web開發中,表單提交算是一種很常見的從客戶端獲取數據的方式了,然而,用戶的行為永遠都是無法預料的,為此,我們在程序中不得已必須對用戶輸入的數據進行嚴格效驗,在WebForm時代我們常用的手段是驗證控件,但是到了Mvc時代,再使用控件變得困難了,因此我們必須找到新的方式來解決這個問題.

在實際使用中,我們可以考慮多種形式來進行這一驗證(注:本文目前只研究服務器端驗證的情況),最直接的方式莫過於對每個表單值手動用C#代碼進行驗證了,比如:

if(!Int32.TryParse(Request.Form[“age”], out age)){
    xxxx…
}
If(age < xxx || age > xxx){
    xxxx…
}

然而正如上面看到的一樣,這種方式枯燥而繁瑣,需要用戶對每個字段都要手動效驗,或許開發人員的一不小心就會造成系統的漏洞.因此,制造出一個能對這種行為進行自動進行的輪子勢在必行,當然,到本文寫作的時候為止,國外已經出現了一些Mvc下使用的驗證框架,然而天下輪子不怕多,我在此厚顏再造出個,只希望不被冠上山寨之名.

該框架的締造源自4MVC團隊的Infancy項目,去年年底開始這個項目的時候,正是mvc框架加入ModelBinder的時候,當時便想到了通過使用ModelBinder來實現一種服務器端自動驗證框架,經過多次修改,該框架慢慢實現了我需要的功能,本系列文章將再次回顧該過程,將該框架的一步步的實現過程加以更細致的重現.

下面正式開始框架的開發,首先我們明確下我們的基本需求:

1.該框架針對簡單實體類(POCO)

2.該框架能自動對實體類的屬性進行效驗

3.該實體能被ModelBinder使用

4.能方便或者自動的執行該效驗,並取得效驗結果和信息

為了實現上面的目標,我們首先來確定一些需要使用的技術手段:

1.要能訪問任意POCO的屬性,必然用到反射

2.要能對屬性進行限制,可選擇使用XML或者Attribute,對程序員來說,Attribute遠比XML來的方便和友好,因此選擇Attribute

3.實現實體驗證方法,可能會使用Command模式,也可能不需要

OK,下面開始我們的實踐了,首先我們考慮測試代碼,假設我擁有實體Student,Student擁有屬性Source,要求Source是int類型,且范圍為0-100,那麼測試代碼的模式應該如下:

Student student = new Student(){
        Source = -1
};
bool validateResult = student.Validate();
Assert.IsFalse(validateResult);

也就是說,我們需要在一個驗證方法中對該對象的所有屬性進行驗證,那麼我們考慮對系統各部分的構建,首先我們需要一個RangeAttribute,這個類能包含對屬性的驗證信息,大致如下:

public class RangeAttribute : Attribute{
    public int Mix{ get; set; } //范圍下限
    public int Max{ get; set; } //范圍上限
    public string Message{ get; set;} //出錯信息

    public RangeAttribute(int min, int max, string message){
    Min = min;
    Max = max;
    Message = message;
}
}

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