使用驗證控制項

使用驗證控制項

RequiredFieldValidator
/*用於要求表單欄位必須輸入值*/
RangeValidator
/*用於檢驗確定一個值是否在的最小值和最大值之間*/
CompareValidator
/*用於比較一個值和另一個值 or 進行資料型別檢查*/
RegularExpressionValidator
/*用於比較一個值和正則表達式*/
CustomValidator
/*用於自定驗証*/
ValidationSummary
/*用於在頁面中顯示所有驗証錯誤的摘要*/
※當使用驗証控制項時,在進行送出頁面的資料任何事之前,都應檢查Page.IsValid屬性。
當該屬性返回True時,且只有該屬性為True時,頁面上才不顯示驗証錯誤。

/*  
驗證控制項的屬性
  
ControlToValidate 
 被驗證控制項,例:ControlToValidate="txtName"
 
Display
 屬性設置常為Dynamic,這樣驗證控制項後面的控制項,才不會被往後推。
 當為None,可以不用單個驗證控制項顯示錯誤,改用ValidationSummary統一顯示。  
 
SetFocusOnError
 當驗證錯誤發生時,自動將焦點移至被驗證控制項
 
Text(用於簡短)、ErrorMessage(顯示於ValidationSummary)
 當驗證錯誤時,顯示的訊息
 
InitialValue(for RequiredFieldValidate)
 指定空白字串外的預設值
*/
※如果想真正強調關聯驗証錯誤的控制項,可以利用Page.Validators屬性。
該屬性公開頁面的驗證控制項集合。

//將驗證控制項的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都賦與相同的值。

SNAGHTML88ece0SNAGHTML897a30SNAGHTML89fc0c

    <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.
*/
※CompareValidator-6個重要的屬性
/*
 ControlToValidate
  被驗證控制項的ID
 Text
  驗證失敗時顯示的錯誤訊息
 Type
  比較的資料型別。String, Integer, Double, Date, Currency
 Operator
  所執行比較的類型。DataTypeCheck, Equal, GreaterThan, Greater, ThanEqual, LessThan, LessThanEqual, NotEqual
 ValueToCompare
  所比較的固定值
 ControlToCompare
  所比較的控制項ID
*/
※CustomValidator-4個重要屬性
/*
 ControlToValidate(在這裡為非必要條件)
  驗證控制項的表單ID
 Text
  驗證失敗時顯示的錯誤訊息
 ClientValidationFunction
  用於執行客戶端的驗證函數名。
 ServerValidate
  CustomValidator執行驗證時引發
*/
SNAGHTML15c283SNAGHTML16229d
<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
  用於隱藏頁面中的驗證摘要。
*/
如果把ShowMessage屬性設為True,並把ShowSummary屬性設為False,那麼驗證摘要只顯示在彈出的警示對話框中。
SNAGHTML7d5e57image
<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>