使用驗證控制項
RequiredFieldValidator
/*用於要求表單欄位必須輸入值*/
RangeValidator
/*用於檢驗確定一個值是否在的最小值和最大值之間*/
CompareValidator
/*用於比較一個值和另一個值 or 進行資料型別檢查*/
RegularExpressionValidator
/*用於比較一個值和正則表達式*/
CustomValidator
/*用於自定驗証*/
ValidationSummary
/*用於在頁面中顯示所有驗証錯誤的摘要*/
當該屬性返回True時,且只有該屬性為True時,頁面上才不顯示驗証錯誤。
/*
驗證控制項的屬性
ControlToValidate
被驗證控制項,例:ControlToValidate="txtName"
Display
屬性設置常為Dynamic,這樣驗證控制項後面的控制項,才不會被往後推。
當為None,可以不用單個驗證控制項顯示錯誤,改用ValidationSummary統一顯示。
SetFocusOnError
當驗證錯誤發生時,自動將焦點移至被驗證控制項
Text(用於簡短)、ErrorMessage(顯示於ValidationSummary)
當驗證錯誤時,顯示的訊息
InitialValue(for RequiredFieldValidate)
指定空白字串外的預設值
*/
該屬性公開頁面的驗證控制項集合。
//將驗證控制項的EnableClientScript=false (關閉客戶端驗證)
//利用驗證控制項,找出被驗證控制項
void Page_PreRender()
{
foreach(BaseValidator valControl in Page.Validators )
WebControl assControl = (WebControl)Page.FindControl(valControl.ControlToValidate);
if(!valControl.IsValid)
assControl.BackColor = System.Drawing.Color.Yellow;
else
assControl.BackColor = System.Drawing.Color.White;
}
※使用驗證群組ValidationGroup
驗證控制項和按鈕控制項都包含ValidationGroup屬性,將相關聯的控制項ValidationGroup都賦與相同的值。
<form id="form1" runat="server">
<div>
<fieldset>
<legend>Login</legend>
<asp:Label ID="lblLoginName" runat="server" Text="Name" AssociatedControlID="txtLoginName" />
<asp:TextBox ID="txtLoginName" runat="server" />
<asp:RequiredFieldValidator ID="reqLoginName" runat="server" ControlToValidate="txtLoginName"
Text="(必填欄位)" Display="Dynamic" ValidationGroup="LoginValidate" />
<br/>
<asp:Label ID="lblLoginPswd" runat="server" Text="Password" AssociatedControlID="txtLoginPswd" />
<asp:TextBox ID="txtLoginPswd" runat="server" />
<asp:RequiredFieldValidator ID="reqLoginPswd" runat="server" ControlToValidate="txtLoginPswd"
Text="(必填欄位)" Display="Dynamic" ValidationGroup="LoginValidate" />
<br/>
<asp:Button ID="btnLogin" runat="server" Text="Login" ValidationGroup="LoginValidate" />
</fieldset>
</div>
<div>
<fieldset>
<legend>Register</legend>
<asp:Label ID="lblRegisterName" runat="server" Text="Name" AssociatedControlID="txtRegisterName" />
<asp:TextBox ID="txtRegisterName" runat="server" />
<asp:RequiredFieldValidator ID="reqRegisterName" runat="server" ControlToValidate="txtRegisterName"
Text="(必填欄位)" Display="Dynamic" ValidationGroup="RegisterValidate" />
<br>
<asp:Label ID="lblRegisterPswd" runat="server" Text="Password" AssociatedControlID="txtRegisterPswd" />
<asp:TextBox ID="txtRegisterPswd" runat="server" />
<asp:RequiredFieldValidator ID="reqRegisterPswd" runat="server" ControlToValidate="txtRegisterPswd"
Text="(必填欄位)" Display="Dynamic" ValidationGroup="RegisterValidate" />
<br/>
<asp:Button ID="btnRegister" runat="server" Text="Register" ValidationGroup="RegisterValidate" />
</fieldset>
</div>
</form>
※關閉驗證
所有按鈕控制項-Button、LinkButton、ImageButton都有CausesValidation屬性。
如果該值為False,那麼點擊該按鈕就會繞過頁面的所有驗證。
繞過驗證對取消按鈕很有用,例:
<body>
<form id="form1" runat="server">
<div>
<fieldset>
<legend>Register</legend>
<asp:Label ID="lblLoginName" runat="server" Text="LoginName" />
<asp:TextBox ID="txtLoginName" runat="server" />
<asp:RequiredFieldValidator ID="reqLoginName" runat="server" ControlToValidate="txtLoginName"
Display="Dynamic" Text="(必填欄位)" />
<br>
<asp:Label ID="lblLoginPswd" runat="server" Text="LoginPswd" />
<asp:TextBox ID="txtLoginPswd" runat="server" />
<asp:RequiredFieldValidator ID="reqLoginPswd" runat="server" ControlToValidate="txtLoginPswd"
Display="Dynamic" Text="(必填欄位)" />
<br/>
<asp:Button ID="btnLogin" runat="server" Text="Login" />
//取消事件中,將頁面重新導向其它網頁Response.Redirect("xxx.apsx")
<asp:Button ID="btnCancel" runat="server" Text="Cancel" OnClick="btnCancel_Click"
CausesValidation="false" />
</fieldset>
</div>
</form>
</body>
※RangeValidator-5個重要屬性;使用時不要忘記設定Type屬性,預設為String。
/*
ControlToValidate
被驗證控制項表單上的ID
Text
驗證失敗時顯示的錯誤訊息
MinimumValue
驗證範圍的最小值
MaxmumValue
驗證範圍的最大值
Type
所執行的比較類型。String、Integer、Double、Date、Currency.
*/
/*
ControlToValidate
被驗證控制項的ID
Text
驗證失敗時顯示的錯誤訊息
Type
比較的資料型別。String, Integer, Double, Date, Currency
Operator
所執行比較的類型。DataTypeCheck, Equal, GreaterThan, Greater, ThanEqual, LessThan, LessThanEqual, NotEqual
ValueToCompare
所比較的固定值
ControlToCompare
所比較的控制項ID
*/
/*
ControlToValidate(在這裡為非必要條件)
驗證控制項的表單ID
Text
驗證失敗時顯示的錯誤訊息
ClientValidationFunction
用於執行客戶端的驗證函數名。
ServerValidate
CustomValidator執行驗證時引發
*/
<script runat="server">
void valComments_ServerValidate(object source, ServerValidateEventArgs args)
{
if (args.Value.Length > 10)
args.IsValid = false;
else
args.IsValid = true;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtComments" runat="server" TextMode="MultiLine" Columns="30" Rows="5" />
<br />
<asp:CustomValidator ID="valComments" runat="server" ControlToValidate="txtComments"
Text="Comments must be less than 10 charactors"
OnServerValidate="valComments_ServerValidate"/>
<br />
<asp:Button ID="btnSummit" runat="server" Text="Send" />
</div>
</form>
</body>
</html>※傳給ServerValidate(伺服器端函數)事件處理的第二個參數(ServerValidateEventArgs),該類有三個屬性:
□Value-表示被驗證的表單控制項的值。
□IsValid-表示驗證成功或失敗。
□ValidateEmptyText-表示所驗證的控制項,當為空值是否要進行驗證。
當不使用客戶端驗證時,只能等到頁面回到伺服器端,才會顯示驗證錯誤。
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script type="text/javascript">
function valComments_ClientValidate(source, args)
{
if (args.Value.length > 10)
args.IsValid = false;
else
args.IsValid = true;
}
</script>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txtComments" runat="server" TextMode="MultiLine" Columns="30" Rows="5" />
<br />
<asp:CustomValidator ID="valComments" runat="server" ControlToValidate="txtComments"
Text="Comments must be less than 10 charactors"
ClientValidationFunction="valComments_ClientValidate" />
<br />
<asp:Button ID="btnSummit" runat="server" Text="Send" />
</div>
</form>
</body>
</html>
使用ValidationSummary;用於頁面上的錯誤列表,賦值給ErrorMessage屬性的信息顯示在ValidationSummary;賦值給Text屬性訊息顯示在頁面主體中。
/*
DispalyMode
用於指定如何格式化錯誤訊息。值:BulletList, List, SingleParagraph
HeaderText
用於在驗證摘要上方顯示的標題文字
ShowMessageBox
用於顯示一個彈出警示對話框
ShowSummary
用於隱藏頁面中的驗證摘要。
*/
<body>
<form id="form1" runat="server">
<div>
<asp:ValidationSummary ID="valSummary" runat="server" ShowSummary="true" ShowMessageBox="true" />
<fieldset>
<legend>Register</legend>
<asp:Label ID="lblLoginName" runat="server" Text="LoginName" />
<asp:TextBox ID="txtLoginName" runat="server" />
<asp:RequiredFieldValidator ID="reqLoginName" runat="server" ControlToValidate="txtLoginName"
Display="Dynamic" Text="(必填欄位)" ErrorMessage="請輸入帳號" />
<br />
<asp:Label ID="lblLoginPswd" runat="server" Text="LoginPswd" />
<asp:TextBox ID="txtLoginPswd" runat="server" />
<asp:RequiredFieldValidator ID="reqLoginPswd" runat="server" ControlToValidate="txtLoginPswd"
Display="Dynamic" Text="(必填欄位)" ErrorMessage="請輸入密碼" />
<br />
<asp:Button ID="btnLogin" runat="server" Text="Login" />
<asp:Button ID="btnCancel" runat="server" Text="Cancel" CausesValidation="false" />
</fieldset>
</div>
</form>
</body>