ASP.NET驗(yàn)證控件主要用來(lái)驗(yàn)證用戶輸入數(shù)據(jù),以確保無(wú)用的,未經(jīng)驗(yàn)證的或矛盾的數(shù)據(jù)不會(huì)被存儲(chǔ)到服務(wù)器中。
ASP.NET提供了以下驗(yàn)證控件:
其它驗(yàn)證控件類是從BaseValidator類繼承的,因此它們繼承了它的屬性和方法。 因此,這將有助于查看此基類的屬性和方法,這對(duì)于所有驗(yàn)證控件都是常見(jiàn)的:
| 編號(hào) | 方法 | 描述 |
|---|---|---|
| 1 | ControlToValidate |
指示要驗(yàn)證的輸入控件。 |
| 2 | Display |
指示如何顯示錯(cuò)誤消息。 |
| 3 | EnableClientScript |
指示是否需要客戶端驗(yàn)證。 |
| 4 | Enabled |
啟用或禁用驗(yàn)證器。 |
| 5 | ErrorMessage |
指示錯(cuò)誤字符串信息。 |
| 6 | Text |
如果驗(yàn)證失敗,將顯示此錯(cuò)誤文本。 |
| 7 | IsValid |
指示控件的值是否有效。 |
| 8 | SetFocusOnError |
它表示在無(wú)效控制的情況下,焦點(diǎn)應(yīng)該切換到相關(guān)的輸入控件。 |
| 9 | ValidationGroup |
該控件所屬的多個(gè)驗(yàn)證器的邏輯組。 |
| 10 | Validate() |
此方法重新驗(yàn)證控件并更新IsValid屬性。 |
RequiredFieldValidator控件確保所需字段不為空。它通常綁定到一個(gè)文本框強(qiáng)制輸入到文本框中。
控件的語(yǔ)法如下:
<asp:RequiredFieldValidator ID="rfvcandidate"
runat="server" ControlToValidate ="ddlcandidate"
ErrorMessage="Please choose a candidate"
InitialValue="Please choose a candidate">
</asp:RequiredFieldValidator>
RangeValidator控件驗(yàn)證輸入值是否在預(yù)定的范圍內(nèi)。
它有三個(gè)特定的屬性:
| 編號(hào) | 屬性 | 描述 |
|---|---|---|
| 1 | Type |
它定義了數(shù)據(jù)的類型。可用值包括:貨幣,日期,雙精度,整數(shù)和字符串。 |
| 2 | MinimumValue |
它指定范圍的最小值。 |
| 3 | MaximumValue |
它指定范圍的最大值。 |
控件的語(yǔ)法如下:
<asp:RangeValidator ID="rvclass" runat="server" ControlToValidate="txtclass"
ErrorMessage="Enter your class (6 - 12)" MaximumValue="12"
MinimumValue="6" Type="Integer">
</asp:RangeValidator>
CompareValidator控件將一個(gè)控件中的值與另一個(gè)控件中的固定值或值進(jìn)行比較。
它具有以下特定屬性:
| 編號(hào) | 屬性 | 描述 |
|---|---|---|
| 1 | Type |
它用來(lái)指定數(shù)據(jù)的類型。 |
| 2 | ControlToCompare |
它指定要與之比較的輸入控件的值。 |
| 3 | ValueToCompare |
它指定了與之比較的常量值。 |
| 4 | Operator |
它指定比較運(yùn)算符,可用值為:Equal,NotEqual,GreaterThan,GreaterThanEqual,LessThan,LessThanEqual和DataTypeCheck。 |
該控件的基本語(yǔ)法如下所示:
<asp:CompareValidator ID="CompareValidator1" runat="server"
ErrorMessage="CompareValidator">
</asp:CompareValidator>
RegularExpressionValidator允許通過(guò)匹配正則表達(dá)式的模式來(lái)驗(yàn)證輸入文本。正則表達(dá)式在ValidationExpression屬性中設(shè)置。
下表總結(jié)了正則表達(dá)式的常用語(yǔ)法結(jié)構(gòu):
| 編號(hào) | 字符轉(zhuǎn)義 | 描述 |
|---|---|---|
| 1 | \b |
匹配一個(gè)退格符。 |
| 2 | \t |
匹配一個(gè)制表符。 |
| 3 | ValueToCompare |
它指定了與之比較的常量值。 |
| 4 | \r |
匹配回車。 |
| 5 | \v |
匹配垂直制表符。 |
| 6 | \f |
匹配換頁(yè) |
| 7 | \n |
匹配一個(gè)新的行。 |
| 8 | \ |
轉(zhuǎn)義字符。 |
除了單字符匹配之外,還可以指定一組可以匹配的字符,稱為元字符。
| 編號(hào) | 元字符 | 描述 |
|---|---|---|
| 1 | . |
匹配除\n之外的任何字符。 |
| 2 | [abcd] |
匹配集合中的任何字符。 |
| 3 | [^abcd] |
匹配不是集合中的任何字符。 |
| 4 | [2-7a-mA-M] |
匹配范圍中指定的任何字符。 |
| 5 | \w |
匹配任何字母數(shù)字字符和下劃線。 |
| 6 | \W |
匹配任何非單詞字符。 |
| 7 | \s |
匹配空格字符,如空格,制表符,新行。 |
| 8 | \S |
匹配任何非空白字符。 |
| 6 | \d |
匹配任何十進(jìn)制字符。 |
| 7 | \D |
匹配任何非十進(jìn)制字符。 |
可以使用量詞來(lái)指定的字符可能出現(xiàn)次數(shù)。
| 編號(hào) | 量詞 | 描述 |
|---|---|---|
| 1 | * |
零或多個(gè)匹配 |
| 2 | + |
一個(gè)或多個(gè)匹配。 |
| 3 | ? |
零個(gè)或一個(gè)匹配。 |
| 4 | {N} |
N個(gè)匹配 |
| 5 | {N,} |
至少N次匹配 |
| 6 | {N,M} |
N到M次匹配 |
控件的語(yǔ)法如下:
<asp:RegularExpressionValidator ID="string" runat="server" ErrorMessage="string"
ValidationExpression="string" ValidationGroup="string">
</asp:RegularExpressionValidator>
CustomValidator控件允許為客戶端和服務(wù)器端驗(yàn)證編寫特定于應(yīng)用程序的自定義驗(yàn)證例程。
客戶端驗(yàn)證通過(guò)ClientValidationFunction屬性完成。 客戶端驗(yàn)證例程應(yīng)該用瀏覽器可以理解的腳本語(yǔ)言編寫,例如JavaScript或VBScript。
服務(wù)器端驗(yàn)證例程必須從控件的ServerValidate事件處理程序中調(diào)用。服務(wù)器端驗(yàn)證例程應(yīng)該用C#或VB.Net等.Net語(yǔ)言編寫。
控件的基本語(yǔ)法如下:
<asp:CustomValidator ID="CustomValidator1" runat="server"
ClientValidationFunction=.cvf_func. ErrorMessage="CustomValidator">
</asp:CustomValidator>
ValidationSummary控件不執(zhí)行任何驗(yàn)證,但顯示頁(yè)面中所有錯(cuò)誤的摘要。 摘要顯示驗(yàn)證失敗的所有驗(yàn)證控件的ErrorMessage屬性的值。
以下兩個(gè)相互包含的屬性列出了錯(cuò)誤消息:
控件的語(yǔ)法如下:
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
DisplayMode = "BulletList" ShowSummary = "true" HeaderText="Errors:" />
復(fù)雜的頁(yè)面在不同的面板中提供不同的信息組。在這種情況下,可能需要為單獨(dú)的組分別進(jìn)行驗(yàn)證。這種情況是使用驗(yàn)證組來(lái)處理的。
要?jiǎng)?chuàng)建驗(yàn)證組,應(yīng)該通過(guò)設(shè)置其ValidationGroup屬性將輸入控件和驗(yàn)證控件放入同一個(gè)邏輯組中。
下面的例子描述了一個(gè)由所有投票人來(lái)填寫的表單信息,分成四個(gè)信息段,用來(lái)選舉總統(tǒng)。 在這里,使用驗(yàn)證控件來(lái)驗(yàn)證用戶輸入。
首先打開Visual Studio,創(chuàng)建一個(gè)名稱為:Validators 的空網(wǎng)站項(xiàng)目,如下圖所示 -

在這個(gè)項(xiàng)目名稱上右鍵選擇:添加 -> 添加新項(xiàng) ,選擇:Web窗體 ,存儲(chǔ)名稱為: Default.aspx,如下所示 -

這是設(shè)計(jì)視圖中的表單:

以下是Defalut.aspx 文件的內(nèi)容:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>驗(yàn)證器示例</title>
</head>
<body>
<form id="form1" runat="server">
<table style="width: 66%;">
<tr>
<td class="style1" colspan="3" align="center">
<asp:Label ID="lblmsg"
Text="選擇您支持的總統(tǒng)"
runat="server" style="font-weight:bold;"/>
</td>
</tr>
<tr>
<td class="style3" style="width:64px;">
候選人:
</td>
<td class="style2">
<asp:DropDownList ID="ddlcandidate" runat="server" style="width:239px">
<asp:ListItem>請(qǐng)選擇一個(gè)候選人</asp:ListItem>
<asp:ListItem>渣渣輝</asp:ListItem>
<asp:ListItem>李布朗</asp:ListItem>
<asp:ListItem>小布什</asp:ListItem>
<asp:ListItem>特朗撲</asp:ListItem>
</asp:DropDownList>
</td>
<td>
<asp:RequiredFieldValidator ID="rfvcandidate"
runat="server" ControlToValidate ="ddlcandidate"
ErrorMessage="請(qǐng)選擇一個(gè)候選人"
InitialValue="請(qǐng)選擇一個(gè)候選人">
</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td class="style3">
性別:
</td>
<td class="style2">
<asp:RadioButtonList ID="rblhouse" runat="server" RepeatLayout="Flow">
<asp:ListItem>男</asp:ListItem>
<asp:ListItem>女</asp:ListItem>
<asp:ListItem>其它</asp:ListItem>
</asp:RadioButtonList>
</td>
<td>
<asp:RequiredFieldValidator ID="rfvhouse" runat="server"
ControlToValidate="rblhouse" ErrorMessage="選擇性別" >
</asp:RequiredFieldValidator>
<br />
</td>
</tr>
<tr>
<td class="style3">
年齡:
</td>
<td class="style2">
<asp:TextBox ID="txtclass" runat="server"></asp:TextBox>
</td>
<td>
<asp:RangeValidator ID="rvclass"
runat="server" ControlToValidate="txtclass"
ErrorMessage="請(qǐng)?zhí)顚懩挲g (16 - 70)" MaximumValue="70"
MinimumValue="16" 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="請(qǐng)輸入電子郵件地址"
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;width:140px" Text="確認(rèn)提交"/>
</td>
</tr>
</table>
<asp:ValidationSummary ID="ValidationSummary1" runat="server"
DisplayMode ="BulletList" ShowSummary ="true" HeaderText="錯(cuò)誤信息提示:" />
</form>
</body>
</html>
以下是Defalut.aspx.cs 文件的內(nèi)容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
UnobtrusiveValidationMode = UnobtrusiveValidationMode.None;
}
protected void btnsubmit_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
lblmsg.Text = "感謝支持";
}
else
{
lblmsg.Text = "填寫所有內(nèi)容";
}
}
}
執(zhí)行上面啟動(dòng)項(xiàng)目,可以看到以下結(jié)果 -

填寫完成表單所有項(xiàng)目,然后提交,得到以下結(jié)果 -
