ASP.NET - 驗證控制元件



ASP.NET 驗證控制元件用於驗證使用者輸入的資料,以確保不會儲存無用、未經身份驗證或矛盾的資料。

ASP.NET 提供以下驗證控制元件:

  • RequiredFieldValidator(必填欄位驗證器)
  • RangeValidator(範圍驗證器)
  • CompareValidator(比較驗證器)
  • RegularExpressionValidator(正則表示式驗證器)
  • CustomValidator(自定義驗證器)
  • ValidationSummary(驗證摘要)

BaseValidator 類

驗證控制元件類繼承自 BaseValidator 類,因此它們繼承了其屬性和方法。因此,瞭解此基類的屬性和方法將有所幫助,這些屬性和方法對所有驗證控制元件都是通用的。

成員 描述
ControlToValidate 指示要驗證的輸入控制元件。
Display 指示如何顯示錯誤訊息。
EnableClientScript 指示是否啟用客戶端驗證。
Enabled 啟用或停用驗證器。
ErrorMessage 指示錯誤字串。
Text 如果驗證失敗,要顯示的錯誤文字。
IsValid 指示控制元件的值是否有效。
SetFocusOnError 指示在控制元件無效的情況下,焦點是否應切換到相關的輸入控制元件。
ValidationGroup 此控制元件所屬的多個驗證器的邏輯組。
Validate() 此方法重新驗證控制元件並更新 IsValid 屬性。

RequiredFieldValidator 控制元件

RequiredFieldValidator 控制元件確保必填欄位不為空。它通常與文字框繫結,以強制輸入文字框。

控制元件的語法如下所示:

<asp:RequiredFieldValidator ID="rfvcandidate" 
   runat="server" ControlToValidate ="ddlcandidate"
   ErrorMessage="Please choose a candidate" 
   InitialValue="Please choose a candidate">
   
</asp:RequiredFieldValidator>

RangeValidator 控制元件

RangeValidator 控制元件驗證輸入值是否在預定的範圍內。

它具有三個特定的屬性:

屬性 描述
型別 它定義資料的型別。可用值包括:Currency(貨幣)、Date(日期)、Double(雙精度)、Integer(整數)和 String(字串)。
MinimumValue 它指定範圍的最小值。
MaximumValue 它指定範圍的最大值。

控制元件的語法如下所示:

<asp:RangeValidator ID="rvclass" runat="server" ControlToValidate="txtclass" 
   ErrorMessage="Enter your class (6 - 12)" MaximumValue="12" 
   MinimumValue="6" Type="Integer">
   
</asp:RangeValidator>

CompareValidator 控制元件

CompareValidator 控制元件將一個控制元件中的值與固定值或另一個控制元件中的值進行比較。

它具有以下特定屬性:

屬性 描述
型別 它指定資料型別。
ControlToCompare 它指定要比較的輸入控制元件的值。
ValueToCompare 它指定要比較的常量值。
Operator 它指定比較運算子,可用值包括:Equal(等於)、NotEqual(不等於)、GreaterThan(大於)、GreaterThanEqual(大於等於)、LessThan(小於)、LessThanEqual(小於等於)和 DataTypeCheck(資料型別檢查)。

控制元件的基本語法如下所示:

<asp:CompareValidator ID="CompareValidator1" runat="server" 
   ErrorMessage="CompareValidator">
   
</asp:CompareValidator>

RegularExpressionValidator(正則表示式驗證器)

RegularExpressionValidator 允許透過與正則表示式的模式匹配來驗證輸入文字。正則表示式在 ValidationExpression 屬性中設定。

下表總結了正則表示式中常用的語法結構:

字元轉義 描述
\b 匹配退格鍵。
\t 匹配製表符。
\r 匹配回車符。
\v 匹配垂直製表符。
\f 匹配換頁符。
\n 匹配換行符。
\ 跳脫字元。

除了單個字元匹配之外,還可以指定一類可以匹配的字元,稱為元字元。

元字元 描述
. 匹配除 \n 之外的任何字元。
[abcd] 匹配集合中的任何字元。
[^abcd] 排除集合中的任何字元。
[2-7a-mA-M] 匹配範圍內指定的任何字元。
\w 匹配任何字母數字字元和下劃線。
\W 匹配任何非單詞字元。
\s 匹配空格字元,如空格、製表符、換行符等。
\S 匹配任何非空格字元。
\d 匹配任何十進位制字元。
\D 匹配任何非十進位制字元。

可以新增限定符來指定字元可以出現的次數。

限定符 描述
* 零個或多個匹配。
+ 一個或多個匹配。
? 零個或一個匹配。
{N} N 個匹配。
{N,} N 個或更多匹配。
{N,M} N 到 M 之間的匹配。

控制元件的語法如下所示:

<asp:RegularExpressionValidator ID="string" runat="server" ErrorMessage="string"
   ValidationExpression="string" ValidationGroup="string">
   
</asp:RegularExpressionValidator>

CustomValidator(自定義驗證器)

CustomValidator 控制元件允許為客戶端和伺服器端驗證編寫應用程式特定的自定義驗證例程。

客戶端驗證透過 ClientValidationFunction 屬性完成。客戶端驗證例程應使用瀏覽器可以理解的指令碼語言(如 JavaScript 或 VBScript)編寫。

伺服器端驗證例程必須從控制元件的 ServerValidate 事件處理程式中呼叫。伺服器端驗證例程應使用任何 .Net 語言(如 C# 或 VB.Net)編寫。

控制元件的基本語法如下所示:

<asp:CustomValidator ID="CustomValidator1" runat="server" 
   ClientValidationFunction=.cvf_func. ErrorMessage="CustomValidator">
   
</asp:CustomValidator>

ValidationSummary(驗證摘要)

ValidationSummary 控制元件不執行任何驗證,但顯示頁面中所有錯誤的摘要。摘要顯示所有驗證失敗的驗證控制元件的 ErrorMessage 屬性的值。

以下兩個互斥屬性列出了錯誤訊息:

  • ShowSummary:以指定格式顯示錯誤訊息。

  • ShowMessageBox:在單獨的視窗中顯示錯誤訊息。

控制元件的語法如下所示:

<asp:ValidationSummary ID="ValidationSummary1" runat="server" 
   DisplayMode = "BulletList" ShowSummary = "true" HeaderText="Errors:" />

驗證組

複雜的頁面在不同的面板中提供了不同的資訊組。在這種情況下,可能需要分別對各個組執行驗證。這種型別的場景是使用驗證組來處理的。

要建立驗證組,應透過設定其 ValidationGroup 屬性將輸入控制元件和驗證控制元件放入相同的邏輯組中。

示例

以下示例描述了一個表單,學校的所有學生(分為四個學院)都可以填寫該表單,用於選舉學生會主席。在這裡,我們使用驗證控制元件來驗證使用者輸入。

這是設計檢視中的表單:

form in Design view

內容檔案程式碼如下所示:

<form id="form1" runat="server">

   <table style="width: 66%;">
   
      <tr>
         <td class="style1" colspan="3" align="center">
         <asp:Label ID="lblmsg" 
            Text="President Election Form : Choose your president" 
            runat="server" />
         </td>
      </tr>

      <tr>
         <td class="style3">
            Candidate:
         </td>

         <td class="style2">
            <asp:DropDownList ID="ddlcandidate" runat="server"  style="width:239px">
               <asp:ListItem>Please Choose a Candidate</asp:ListItem>
               <asp:ListItem>M H Kabir</asp:ListItem>
               <asp:ListItem>Steve Taylor</asp:ListItem>
               <asp:ListItem>John Abraham</asp:ListItem>
               <asp:ListItem>Venus Williams</asp:ListItem>
            </asp:DropDownList>
         </td>

         <td>
            <asp:RequiredFieldValidator ID="rfvcandidate" 
               runat="server" ControlToValidate ="ddlcandidate"
               ErrorMessage="Please choose a candidate" 
               InitialValue="Please choose a candidate">
            </asp:RequiredFieldValidator>
         </td>
      </tr>

      <tr>
         <td class="style3">
            House:
         </td>

         <td class="style2">
            <asp:RadioButtonList ID="rblhouse" runat="server" RepeatLayout="Flow">
               <asp:ListItem>Red</asp:ListItem>
               <asp:ListItem>Blue</asp:ListItem>
               <asp:ListItem>Yellow</asp:ListItem>
               <asp:ListItem>Green</asp:ListItem>
            </asp:RadioButtonList>
         </td>

         <td>
            <asp:RequiredFieldValidator ID="rfvhouse" runat="server" 
               ControlToValidate="rblhouse" ErrorMessage="Enter your house name" >
            </asp:RequiredFieldValidator>
            <br />
         </td>
      </tr>

      <tr>
         <td class="style3">
            Class:
         </td>

         <td class="style2">
            <asp:TextBox ID="txtclass" runat="server"></asp:TextBox>
         </td>

         <td>
            <asp:RangeValidator ID="rvclass" 
               runat="server" ControlToValidate="txtclass" 
               ErrorMessage="Enter your class (6 - 12)" MaximumValue="12" 
               MinimumValue="6" Type="Integer">
            </asp:RangeValidator>
         </td>
      </tr>

      <tr>
         <td class="style3">
            Email:
         </td>

         <td class="style2">
            <asp:TextBox ID="txtemail" runat="server" style="width:250px">
            </asp:TextBox>
         </td>

         <td>
            <asp:RegularExpressionValidator ID="remail" runat="server" 
               ControlToValidate="txtemail" ErrorMessage="Enter your email" 
               ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*">
            </asp:RegularExpressionValidator>
         </td>
      </tr>

      <tr>
         <td class="style3" align="center" colspan="3">
            <asp:Button ID="btnsubmit" runat="server" onclick="btnsubmit_Click" 
               style="text-align: center" Text="Submit" style="width:140px" />
         </td>
      </tr>
   </table>
   <asp:ValidationSummary ID="ValidationSummary1" runat="server" 
      DisplayMode ="BulletList" ShowSummary ="true" HeaderText="Errors:" />
</form>

提交按鈕後面的程式碼:

protected void btnsubmit_Click(object sender, EventArgs e)
{
   if (Page.IsValid)
   {
      lblmsg.Text = "Thank You";
   }
   else
   {
      lblmsg.Text = "Fill up all the fields";
   }
}
廣告