[ASP.NET] 驗證控制項 / Validation Control

[ASP.NET] 驗證控制項 / Validation Control

要撰寫更安全的應用程式,其關鍵原則在於使用前要先正確取得資料。正確取得資料需要為每個外部輸入套用驗證 步驟。在ASP.NET中,驗證控制項提供簡單易用的機制,可以完成各種驗證工作,包括測試型態是否有效,以及數值是否位於指定範圍或必要欄位內;熟練這 些控制項的用法是初學者應該要做的事。

ASP.NET驗証方式有兩種: 1.使用驗証控制項提供使用者輸入資料驗証、2.網頁自動進行安全性檢查

1.使用驗証控制項提供使用者輸入資料驗証,使用者控制項分為以下:

CompareValidator 使用比較運算子,將使用者的資料與固定數值相比。此外,也可以與相同網頁內其他控制項的屬性數值相比。
CustomValidator 利用程式定義之驗證邏輯來檢查使用者資料的正確性。當其他的驗證元件無法執行所需的驗證,以及當你想要使用自訂的程式碼來驗證輸入的時候,便可以使用這個驗證元件。
RangeValidator 確保使用者的資料落在指定的範圍內。上限和下限可以數字、字串或日期加以表示。
RegularExpressionValidator 使用規則運算式所定義的樣式來驗證使用者的資料。
RequiredFieldValidator 確保使用者為必要欄位填入數值。

快照-2009423143426

2.網頁自動進行安全性檢查,主要是防止惡意程式,若使用者輸入了危險字串(例如像指令碼),ASP.NET就會自動的產生安全性錯誤訊息 ,若是要關閉可以將Page指示詞中的ValidateRequest設為false

<%@ Page ValidateRequest="false" %>

 

3.單一輸入控制項可以使用多個驗證控制項,以便進行不同條件的驗證。

4.驗証控制項的EnableClientScript,可針對驗証控制項選擇驗証位置是要在用戶端或是伺服器端。在用戶端驗証可以立即回應驗証成功與否,無需PostBack,相關為減少了對伺服器端的負載。

快照-200942424753

5.只有CustomValidator可以同時選擇Server(ServerValidate)和Client(EnableClientScript)位置驗証,其餘控制項均只能擇一使用。

6.ValidationSummary控制項,這個控制項本身並未執行驗證工作,它只會顯示一個文字標籤(MessagesBox),用來總結網頁上的所有驗證錯誤訊息。

<asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True" />

 

7.並非所有的伺服器控制項都可以被驗證,只有含屬性為[Validation]的控制項才能夠被驗證。如下圖:

快照-2009423164153快照-200942424319

8.控制項的CausesValidation屬性可決定是否觸發驗証

快照-20094245013

<asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" CausesValidation="False" />

 

9.控制項的共有屬性

ControlToValidate 要驗証控制項的ID。這是相當重要的屬性,這個屬性在決定被驗証的控制項。
Display 如果用戶端有支援驗證且已啟用,便可以取得或設定應該如何配置錯誤訊息的空間──可以是靜態或動態。在進行伺服器端驗證時,這個屬性會被忽略。只有在瀏覽器支援CSS樣式的display時才允許Static靜態顯示。預設值是Dynamic。
EnableClientScript 預設值是true;取得或設定是否啟用用戶端驗證。
Enabled 取得或設定是否啟用驗證控制項
ErrorMessage 取得或設定錯誤訊息的文字。
ForeColor 取得或設定在驗證失敗時,所顯示之訊息的顏色。
IsValid 取得或設定關聯的輸入控制項是否通過驗證。
SetFocusOnError 指示是否將焦點移至驗證失敗的控制項上面。
Text 取得或設定驗證元件錯誤訊息所顯示的說明。不過這段文字並不會取代總結文字當中的ErrorMessage內容。
ValidationGroup 取得或設定控制項所屬的驗證群組。

10.ValidationGroup驗證群組:假設表單上有一組輸入和驗證控制項以及兩個按鈕,點選其中任何按鈕永遠都會驗證所有的控制項,若將要驗証的控制項編列成同一群組名稱,當驗証按鈕被按下時,就只會執行該群組的驗証項目。

11.控制項的主要屬性

11-1.RequiredFieldValidator主要屬性如下:

InitialValue 控制項會驗証該屬性的值,使用者必須挑選欲設值以外的值才能通過驗証。

 

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem>Please</asp:ListItem>
    <asp:ListItem>1</asp:ListItem>
    <asp:ListItem>2</asp:ListItem>
    <asp:ListItem>3</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"       ControlToValidate="DropDownList1" ErrorMessage="RequiredFieldValidator" InitialValue="Please"></asp:RequiredFieldValidator>

 

11-2.RangeValidator主要屬性如下:

MinimumValue 設定範圍最小值。
MaxmumValue 設定範圍最大值。
Type 輸入要驗証的資料型態。

 

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:RangeValidator ID="RangeValidator1"
    runat="server" ErrorMessage="RangeValidator" ControlToValidate="TextBox1" MaximumValue="60"
    MinimumValue="18" Type="Integer"></asp:RangeValidator><br>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />

 

 

11-3.CompareValidator主要屬性如下:

ControlToCompare 設定要比較的控制項。
ValueToCompare 設定要比較的值。
Operator 設定比較運算子。
Type 輸入要驗証的資料型態。

 

<asp:TextBox ID="TextBox2" runat="server" ValidationGroup="G1"></asp:TextBox><asp:CompareValidator
    ID="CompareValidator1" runat="server" ErrorMessage="兩筆資料不同" ControlToCompare="TextBox1"
    ControlToValidate="TextBox2" ValidationGroup="G1"></asp:CompareValidator>

 

 

<asp:TextBox ID="TextBox3" runat="server" ValidationGroup="G2"></asp:TextBox>
<asp:CompareValidator ID="CompareValidator2" runat="server" ControlToValidate="TextBox3"
    ErrorMessage="請輸入日期格式" Operator="DataTypeCheck" Type="Date" ValidationGroup="G2"></asp:CompareValidator>
<br />
<asp:Button ID="Button2" runat="server" Text="Button" ValidationGroup="b" />

 

 

11-4.RegularExpressionValidator 主要屬性如下:

ValidationExpression 設定要用來驗證輸入的規則運算式。

規則運算範例網站http://regexlib.com/

 

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Button ID="Button1"
    runat="server" Text="Button" /><asp:RegularExpressionValidator ID="RegularExpressionValidator1"
        runat="server" ErrorMessage="RegularExpressionValidator" ControlToValidate="TextBox1"
        ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator>

 

 

11-5.CustomValidator 主要屬性如下:

ClientValidationFunction 指定Client端的javascript名稱

主要事件如下:

ServerValidate 撰寫Server端的邏輯運算

 

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:CustomValidator ID="CustomValidator1" runat="server" ClientValidationFunction="Client_Validate"
    ControlToValidate="TextBox1" ErrorMessage="必須為偶數" OnServerValidate="CustomValidator1_ServerValidate">  </asp:CustomValidator>

用戶端的程式

<script type="text/javascript">
    function Client_Validate(sender, e) {
        if (e.Value % 2 == 0)
            e.IsValid = true;
        else
            e.IsValid = false;
    }
</script>

 

 

伺服器端的事件

<script runat="server">
    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (Convert.ToDecimal(args.Value) % 2 == 0)
            args.IsValid = true;
        else
            args.IsValid = false;
    }
</script>

 

 

 

範例下載:ASP_C_Validate.rar

 

 

 

 

 

 

 

 

 

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo