ASP.NET 的有效性控制是驗證使用者輸入的資料從而確保那些無用的、未經授權的、矛盾的資料無法儲存。
ASP.NET 提供以下幾個方面的驗證控制:
必要欄位驗證器(RequiredFieldValidator)
範圍驗證器(RangeValidator)
比較驗證器(CompareValidator)
正規表示式驗證器(RegularExpressionValidator)
自訂驗證器(CustomValidator)
驗證摘要控制項(ValidationSummary)
有效性驗證的類別從BaseValidator 類別中繼承得到,因此它們繼承了它的屬性和方法。因此學習這個作為所有有效性控制的基礎的基本類別的屬性和方法對於後續學習將有很大幫助:
組成部分 | 描述 |
---|---|
ControlToValidate | 取得或設定要驗證的輸入控制項。 |
Display | 說明錯誤提示如何顯示。 |
EnableClientScript | 說明客戶端的是否採取了驗證。 |
Enabled | 開啟或關閉驗證器。 |
ErrorMessage | 說明錯誤字串。 |
Text | 如果驗證失敗將要顯示的文字。 |
IsValid | 說明控制值是否有效。 |
SetFocusOnError | 在驗證失敗時是否將焦點設定到相關的輸入控制項。 |
ValidationGroup | 取得或設定此驗證控制項所屬的驗證組的名稱。 |
Validate | 對關聯的輸入控制項執行驗證並更新IsValid 屬性。 |
RequiredFieldValidator 控制確保必填欄位不為空。它主要和文字方塊綁定使得使用者向文字方塊輸入。
此控制的語法如下:
<asp:RequiredFieldValidator ID="rfvcandidate" runat="server" ControlToValidate ="ddlcandidate" ErrorMessage="Please choose a candidate" InitialValue="Please choose a candidate"></asp:RequiredFieldValidator>
RangeValidator 控制項負責核實輸入的值是否在預設的範圍之內。
它有三種特定屬性:
屬性 | 描述 |
---|---|
類型(Type) | 它定義了資料類型。可用的資料類型包括: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 控制項會根據輸入到另一個輸入控制項中的值、常數數值或正確的資料類型來驗證值。
它有以下的特定屬性:
屬性 | 描述 |
---|---|
Type | 它定義了資料類型。 |
ControlToCompare | 它指定了輸入控制中需要比較的值。 |
ValueToCompare | 它指定了輸入控制中不變的值。 |
Operator | 它指定了比較的運算符,可用的值包括:相等、不等、大於等於、小於、小於等於、資料類型檢查。 |
這種控制項的基本語法如下:
<asp:CompareValidator ID="CompareValidator1" runat="server" ErrorMessage="CompareValidator"></asp:CompareValidator>
RegularExpressionValidator 控制項允許透過和正規表示式匹配來確定輸入的有效性。正規表示式在ValidationExpression 的屬性裡設定。
下表總結了正規表示式通常所用到的語法結構:
轉義字符 | 描述 |
---|---|
b | 和退格鍵匹配。 |
t | 和tab 匹配。 |
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 控制項允許編寫客戶端和伺服器端特定的驗證例程來驗證值。
客戶端驗證透過ClientValidationFunction 來適當的完成。客戶端驗證例程應該用瀏覽器能夠辨識的腳本語言來編寫,例如JavaScript 或VBScript。
伺服器端的驗證例程應該由控制項的ServerValidate 事件處理器來產生。伺服器端的驗證程式應該用任意的.Net 語言來寫,例如:C# 或VB.Net。
這種控制項的基本語法如下:
<asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction=.cvf_func. ErrorMessage="CustomValidator"></asp:CustomValidator>
ValidationSummary 控制項並不會進行任何驗證但是會在頁面顯示一個所有的錯誤的總結。這個總結可以顯示所有失敗的驗證控制項的錯誤訊息屬性的值。
下面兩個相互包含的屬性清單列出來錯誤訊息:
ShowSummary :以特殊格式顯示錯誤訊息。
ShowMessageBox :用單獨的視窗顯示錯誤訊息。
這個控制項的基本語法如下:
<asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode = "BulletList" ShowSummary = "true" HeaderText="Errors:" />
複雜的頁面會在不同的層面有不同的資訊組。在這種情況下,不同的組別就要有不同的驗證這種情況可以用驗證組來解決。
建立一個驗證組,你必須透過設定輸入控制項和驗證控制項的ValidationGroup 屬性從而把它們放到相同的邏輯組中。
下面這個範例描述了一個將由全校學生填寫的表格,這個表格分為四部分是用來競選校長的。在這裡,我們將用驗證控制項來驗證使用者所輸入的。
這是在設計視圖下的形式:
這部分內容的程式碼如下:
<form id="form1" runat="server"> <table> <tr> <td colspan="3" align="center"> <asp:Label ID="lblmsg" Text="President Election Form : Choose your president" runat="server" /> </td> </tr> <tr> <td> Candidate: </td> <td> <asp:DropDownList ID="ddlcandidate" runat="server" > <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> <tr> <td> House: </td> <td> <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: </td> < td> <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> Email: </td> <td> <asp:TextBox ID="txtemail" runat="server"> </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 align="center" colspan="3"> <asp:Button ID="btnsubmit" runat="server" onclick="btnsubmit_Click" style ="text-align: center" Text="Submit" /> </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"; }}