ASP.NET 進階編程基礎之驗證控制項介紹

來源:互聯網
上載者:User

目錄
1. 驗證控制項簡介
2. 驗證控制項的使用方法
3. 小結

--------------------------------------------------------------------------------

1. 驗證控制項簡介
顧名思義,驗證控制項就是校正使用者輸入資料正確性的控制項,如使用者在文字框中輸入資料後,便顯示一條提示資訊,表明了校正的資料是不合法的。驗證過程既可以在伺服器上執行,也可以在客戶機上執行,在用戶端啟動並執行校正代碼是資料提交之前被執行的,因此可以提高程式的效能。ASP.NET的驗證控制項可以進行多種校正,如資料範圍檢查、資料間的比較和自訂校正等等,下面的內容將會逐一介紹這些驗證控制項。


三種控制項的區別
(1) HTML控制項,ASP.NET把HTML控制項當成一般字元串渲染到瀏覽器端,不去檢查正確性,無法再伺服器端進行處理。

(2) ASP.NET服務端控制項,經過ASP.NET高度封裝的控制項,使用簡單,運行在伺服器端,可以再服務端使用C#代碼進行操作,會渲染到用戶端為HTML控制項。

(3) runat=”server”的HTML控制項,在HTML控制項的基礎上面添加runat=”server”,也是運行在服務端的,也可以服務端使用C#進行操作,也會渲染到用戶端,不像ASP.NET服務端控制項那樣高度封裝,暴露的屬性大部分是普通的HTML 屬性,和ASP.NET服務端控制項相比的好處是:當需要在服務端要對控制項進行操作的時候,如果控制項沒有被ASP.NET服務端控制項封裝的時候,用runat=”server”的HTML控制項更方便,runat=”server”的HTML控制項也會對虛擬路徑,id->ClientID進行處理,所以在使用虛擬路徑,UserControl中也可能會用到。

<input type=”Text” id=”txt1”runat=”server” />

(4) a->HtmlAnchor;form->HtmlForm;head->HtmlHead;input->HtmlInputButton,HtmlInputCheckBox,HtmlInputText等;meta->HtmlMeta;table->HtmlTable;tr->HtmlTableRow;td->HtmlTableCell;title->HtmlTitl。為單獨封裝的標籤(比如:div)對應的類型為:HtmlGenericControl。使用Attributes屬性操作未封裝的屬性。

(5) 服務端HTML控制項不像ASP.NET控制項那樣封裝的進階,比如:ASP.NET控制項的BgColor屬性為Color類型,而HTML控制項的BgColor屬性則為字串類型,需要開發人員設定合適的值。

註:在ascx寫入如下代碼,拖放一個TextBox控制項和Button控制項,如果要操作當滑鼠滑過Button控制項的時候給TextBox賦值,直接在Button控制項裡面寫onmouserover這樣是會報錯的,所以我們要單獨寫一個JavaScript方法。

 代碼如下 複製代碼

<script type="text/javascript">

    document.getElementById("<%=Button1.ClientID %>").onmouserover = function () {

        document.getElementById("<%=TextBox1.ClientID %>").value = "Kencery";

    }

</script>

驗證控制項
(1) 必須要對使用者輸入的資料進行合法性校正,這些校正邏輯很多是重複的,比如:欄位不可為空,必須為日期格式,數字不能大於100等,而且要同時在用戶端和服務端校正,用戶端校正提高可用性,服務端校正防止惡意攻擊,ASP.NET驗證控制項就是為了簡化這些問題而提供的。

(2) ASP.NET提供了如下的組件

 1) RequiredFieldValidator:欄位必填。

 2) RangeValiclator:值在給定的最大值最小值之間。

 3) CompareValidator:用於比較兩個值的關係是否滿足要求或者是否是指定類型的資料。

 4) RegularExpressionValidator:校正資料滿足Regex。

 5) CustomValidator:自訂驗證。

(3) RequiredFieldValidator

 1) ControlToValidate設定要驗證的控制項,Text屬性為當被驗證的控制項為空白的時候顯示的錯誤資訊,Text不僅可以寫文本,還可以寫任何HTML內容。

 2) 有時候控制項如果是預設值也認為是空值,比如:下拉式清單的選中值”---請選擇性別---”,文字框的值為”填入搜尋索引鍵”,只有將RequiredFieldValidator的InitialValue屬性設定為”---請選擇性別---”,”填入搜尋索引鍵”即可。

(4) Validator共性

 1) 頁面中的IsValid屬性用來判斷頁面中的所有Validator是否都校正通過,只有都校正通過才會為True,即使頁面中的Validator服務端校正報錯(禁用JavaScript跳過用戶端校正),在服務端方法中的業務代碼(比如:btnOK.Click)也會被執行,因此如果代碼在資料校正不通過的不能執行,則需要判斷IsValid的值。

註:在Button控制項下面寫入如下代碼:

 代碼如下 複製代碼

 if(!IsValid){

    return;

}

if(this.IsValid)
{    
  正確資訊;                         
 else{
 
  錯誤資訊;

} }

 2) 所有驗證控制項都有Display屬性,用來決定如何顯示錯誤資訊。三個值:static:沒有錯誤資訊的時候控制項的Visiblity樣式為Hidden來實現隱藏;Dynamic,沒有錯誤資訊的時候控制項的display樣式為none來實現隱藏,這兩者的區別在於:Visiblity:hidden隱藏控制項仍會佔據空間,而display:none隱藏則不會佔用控制項,Display屬性還可以設定為None(用來配合後面講的ValidationSummary)。

 3) 幾乎所有的驗證控制項都有ControlToValidate,Text屬性,所有控制項都幾乎在用戶端和服務端都要進行校正。

 4) 如果在一個頁面中同時放置註冊和登入表單,那麼他們的驗證就會同時進行,這樣雖然只是登入,但是註冊的驗證也會觸發,可以使用驗證組來解決這個問題,將同一組的控制項(表單,提交按鈕)等的ValidationGroup設定成相同的值就可以,這樣的話和Button等觸發事件的控制項ValidationGroup相同的控制項才會校正。

 5) 如果將按鈕控制項(Button,ImageButton,LinkButton)的CausesValidator屬性設定為false,則這個按鈕的點擊不觸發校正。

(5) RangeValidator

 1) RangeValidator:MininmumValue,MaximumValue為最小,最大值,Type屬性為資料類型(String,Interger,Double,Date,Currency等)。例如:年齡,畢業日期在合理範圍內。

 2) RangeValidator,CompareValidator,RegularExpressValidator等都不會對非空值進行檢驗,所以如果欄位不允許為空白則需要在使用RequiredFieldValidator。

(6) CompareValidator

1) CompareValidator:Type屬性同RangeValidator,Operator屬性,比較操作符,可選值DataTypeCheck,Equal,GreaterThan,GreaterThanEqual,LessThan,LessThanEqual,NotEqual,ValueToCompare所比較的運算子右邊的值,ControlToCompare設定和另一個控制項進行比較。

 2) 校正資料類型,不進行範圍的比較,ControlToValidate設定要校正的控制項,Type設定要校正的資料類型,Operator設定為DataTypeCheck。

 3) 要進行範圍的比較,ControlToValidator設定要校正的控制項,Type設定要校正的資料類型,Operator設定為GreaterThan,ValueToCompare為要比較的值,也可以編程的時候動態設定。

 4) 與另一個空間的值進行比較,ControlToValidate設定要校正的控制項,Type設定要檢驗的資料類型,Operator設定為GreaterThan,ControlToCompare設定為要比較的驗證控制項(運算子右邊的控制項)。

(7) 進階Validator

1) RegularExpressionValidator,ValidationExpression屬性為Regex,VS的可視化編輯提供了幾個內建的Regex,也可以自己寫,案例:檢驗Email地址,社會安全號碼碼,QQ號碼(5位至10位的數字),個人說明必須在10到50字之間。

 2) CustomValidator,自訂驗證控制項,當ASP.NET內建的驗證控制項無法滿足要求的時候可以使用CustomValidator。

 3) ServerValidate事件為服務端的校正代碼,在事件處理函數中讀取args.Value來獲得待校正的值,如果值合法則將args.IsValid設定為True,否則設定為False,如果為ClientValidationFunction設定一個函數名,那麼會首先在用戶端調用指定的JavaScript函數進行用戶端校正,否則將只做伺服器端校正,用戶端校正函數的簽名是:”函數名(src,args)”,argsd的屬性以及意義和服務端的一樣。

(8) 匯總錯誤訊息

1) 使用Validator錯誤訊息會顯示在放置的位置,這樣有兩個可能的問題,如果表單非常大,使用者看不到全部的錯誤資訊,希望把訊息集中顯示在提交按鈕旁邊,如果錯誤資訊非常多,錯誤資訊會散落各地,希望能集中顯示。

 2) ValidationSummary控制項用來集中顯示錯誤資訊,每個驗證控制項都有ErrorMessage,Text兩個屬性,ErrorMessage是用來顯示到ValidationSummary中的值,Text是用來顯示在Validator位置的值,如果Text為空白,則ErrorMessage會同時顯示到ValidationSummary和控制項的位置,一般Text的值要簡短(比如:”必填”,”*”),因為直接顯示到空間的位置,能知道指的是哪個控制項,ErrorMessage要詳細一點(比如:”使用者名稱不可為空”,不能是”不可為空”等),這樣才能從ValidationSummary每條錯誤資訊中讀取值出來。

 3) ValidationSummary的屬性:DisPlayMode:顯示模式,ShowMessageBox使用者同時顯示警告對話方塊。


 驗證控制項的使用方法
① RequiredFieldValidator控制項
當頁面上的控制項要求必須輸入資料時,RequiredFieldValidator就起作用了,ControlToValidate屬性選擇需要驗證的控制項,而ErrorMessage屬性則是校正不合法後顯示的錯誤提示資訊。

 代碼如下 複製代碼
<HTML>
  <HEAD>
    <title>RequiredFieldValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
    Name:
    <asp:TextBox id="TextBox1" runat="server" ></asp:TextBox>
    <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server"
ErrorMessage="Please enter your name" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>
    <asp:Button id="Button1"  runat="server" Text="Button"></asp:Button>
  </form>
</BODY>
</HTML>

②CompareValidator控制項
CompareValidator控制項是用來比較兩個輸入控制項之間的資料一致性的,同時也可以用來校正控制項中內容的資料類型:如整形、字串型等。ControlToCompare和ControlToValidate屬性用來設定進行比較的兩個控制項。

 代碼如下 複製代碼
<HTML>
  <HEAD>
    <title>CompareValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
    <P>Password:
    <asp:TextBox id="txtPwd" runat="server" TextMode="Password"></asp:TextBox><BR>
    Confirm:
    <asp:TextBox id="TxtCfm" runat="server" TextMode="Password"></asp:TextBox></P>
    <P>
    <asp:Button id="Button2" runat="server" Text="Button"></asp:Button>
    <asp:CompareValidator id="CompareValidator1" runat="server" ErrorMessage="Password Error!"
     ControlToValidate="TxtCfm" ControlToCompare="txtPwd"></asp:CompareValidator></P>
  </form>
</BODY>
</HTML>

③RangeValidator控制項
RangeValidator控制項可以用來判斷使用者輸入的值是否在某一特定範圍內,屬性MaximumValue和MinimumValue用來定義範圍的最大和最小值。

 代碼如下 複製代碼
<HTML>
  <HEAD>
    <title>RangeValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
  <P>Age:
  <asp:TextBox id="TxtAge" runat="server"></asp:TextBox>
  <asp:RangeValidator id="RangeValidator1" runat="server" ControlToValidate="TxtAge"
   ErrorMessage="Age Error!" MaximumValue="99" MinimumValue="1"></asp:RangeValidator></P>
  </form>
</BODY>
</HTML>

④RegularExpressionValidator控制項
RegularExpressionValidator控制項可以判斷使用者輸入的運算式是否正確,如電話號碼、郵編、URL等,ControlToValidate屬性選擇需要驗證的控制項,ValidationExpression屬性則編寫需要驗證的運算式的樣式,下面的例子就是一段校正郵編的代碼。

 代碼如下 複製代碼
<HTML>
  <HEAD>
    <title>RegularExpressionValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
  <P>Postal Code:
  <asp:TextBox id="TxtPostalCode" runat="server"></asp:TextBox>
  <asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server"
       ControlToValidate="TxtPostalCode" ErrorMessage="Postal Code Error!"   
       ValidationExpression="d6}"></asp:RegularExpressionValidator></P>
  </form>
</BODY>
</HTML>

⑤CustomValidator控制項
CustomValidator控制項用於執行使用者自訂的驗證,這種校正既可以是伺服器端的也可以是用戶端的,下面的代碼就是使用用戶端驗證郵編的例子。

 代碼如下 複製代碼
<HTML>
  <HEAD>
    <title>CustomValidator Example</title>
  </HEAD>
<BODY>
  <form id="Form1" runat="server">
    <P>Postal Code:
    <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
    <asp:CustomValidator id="CustomValidator1" runat="server" ControlToValidate="TextBox1" 
         ErrorMessage="CustomValidator"  ClientValidationFunction="ClientValidate">
    </asp:CustomValidator></P>
  </form>
</BODY>
</HTML>
<script language="vbscript">
   Sub ClientValidate(source, arguments)
      If isnumeric(arguments.Value ) and len(arguments.Value)=6 Then
         arguments.IsValid=true
      Else
         arguments.IsValid=false
      End If
   End Sub
</script>

⑥ValidationSummary控制項
這個控制項會將頁面中所有的校正錯誤輸出為一個列表,列表的顯示方式由DisplayMode屬性設定。

 代碼如下 複製代碼
<HTML>
  <HEAD>
    <title>ValidationSummary Example</title>
  </HEAD>
<body>
  <form id="Form1" runat="server">
  <P>Age:
  <asp:TextBox id="TxtAge" runat="server"></asp:TextBox>
  <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server"
 ControlToValidate="TxtAge" ErrorMessage="Age Error!" Display="None"></asp:RequiredFieldValidator><BR>
  Postal Code:
  <asp:TextBox id="TxtPostalCode" runat="server"></asp:TextBox>
  <asp:RequiredFieldValidator id="RequiredFieldValidator2" runat="server"
ControlToValidate="TxtPostalCode" ErrorMessage="Postal Code Error!"
Display="None"></asp:RequiredFieldValidator></P>
  <P>
  <asp:Button id="Button1" runat="server" Text="Button"></asp:Button></P>
  <P>
  <asp:ValidationSummary id="ValidationSummary1" runat="server"
   HeaderText="You must enter a value in the following fields:"></asp:ValidationSummary></P>
  </form>
</body>
</HTML>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.