2013年12月23日 星期一

[ASP.NET C# ] 實作使用者表單輸入驗證(表單內容檢查)

Reference:http://www.dotblogs.com.tw/yc421206/archive/2009/04/24/8155.aspx

要撰寫更安全的應用程式,其關鍵原則在於使用前要先正確取得資料。正確取得資料需要為每個外部輸入套用驗證 步驟。在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

沒有留言:

張貼留言