簡體   English   中英

ASP.NET客戶端與服務器端驗證

[英]ASP.NET Client-side vs Server-side Validation

我經常從學校的“講師”那里得到不正確的信息。

對於ASP.NET Web應用程序,來自工具箱的驗證器(如CompareValidator,RangeValidator,RequiredFieldValidator等)是否被視為服務器端驗證?

因為我們還添加了一個jQuery NuGet包,當用戶使用Tab鍵時,它會提供實時驗證,就像用戶在需要數字時鍵入字母一樣。

對於C#中的WPF,我創建一個Validator類或使用一個Library並通過靜態方法檢查驗證。 我是否也應該在ASP.NET中這樣做? 還是RequiredFieldValidator等足以用於服務器端驗證?

這是一個例子:

<div class="form-group">
    <label class="control-label col-sm-4">Length:</label>
    <div class="col-sm-4">
        <asp:TextBox ID="txtLength" runat="server" CssClass="form-control" MaxLength="15"></asp:TextBox>
    </div>
    <div class="col-sm-4">
        <asp:RequiredFieldValidator ID="rfvLength" runat="server" ErrorMessage="Length is required" 
            ControlToValidate="txtLength" CssClass="error" Display="Dynamic" SetFocusOnError="True"></asp:RequiredFieldValidator>
        <asp:RangeValidator ID="rngLength" runat="server" ErrorMessage="Must be between .01 and 10,000" 
            MaximumValue="10000" MinimumValue=".01" ControlToValidate="txtLength" CssClass="error" Display="Dynamic" 
            SetFocusOnError="True" Type="Double"></asp:RangeValidator>
    </div>                            
</div>

謝謝

******編輯*****

像我的“講師”一樣,您給出的答案不清楚或不完整。

是或否,這是ASP.NET中的服務器端驗證嗎?

<div class="form-group">
    <label class="control-label col-sm-4">Length:</label>
    <div class="col-sm-4">
        <asp:TextBox ID="txtLength" runat="server" CssClass="form-control" MaxLength="15"></asp:TextBox>
    </div>
    <div class="col-sm-4">
        <asp:RequiredFieldValidator ID="rfvLength" runat="server" ErrorMessage="Length is required" 
            ControlToValidate="txtLength" CssClass="error" Display="Dynamic" SetFocusOnError="True"></asp:RequiredFieldValidator>
        <asp:RangeValidator ID="rngLength" runat="server" ErrorMessage="Must be between .01 and 10,000" 
            MaximumValue="10000" MinimumValue=".01" ControlToValidate="txtLength" CssClass="error" Display="Dynamic" 
            SetFocusOnError="True" Type="Double"></asp:RangeValidator>
    </div>                            
</div>

然后我還添加:

protected void btnCalculate_Click(object sender, EventArgs e)
        {
            if (IsValid)
            {
                double length = Convert.ToDouble(txtLength.Text);
                double width = Convert.ToDouble(txtWidth.Text);

                Rectangle r = new Rectangle(length, width);

                txtArea.Text = r.Area().ToString("f");
                txtPerimeter.Text = r.Perimeter().ToString("f");
                txtDiagonal.Text = r.Diagonal().ToString("f");
            }               
        }

這在ASP.NET中作為服務器端驗證是否正確?我是否正確使用了if(IsValid)部分?

您將混合使用ASP.NET驗證控件和客戶端驗證與服務器端驗證之間的差異。

當ASP.NET頁面呈現Validation Controls RequiredFieldValidatorRangeValidator等時,它將自動創建客戶端JavaScript函數以在瀏覽器內執行驗證,即客戶端驗證。

IsValid是ASP.Net Pages的服務器端驗證功能,通過它可以驗證WebForm / WebPage中使用的Asp.Net驗證控件是否已執行驗證,並且在服務器端代碼中驗證是否應用了所有驗證(即,如果所有輸入必填字段等),然后IsValid變為true。

請注意,將IsValid放入服務器端代碼不是強制性的 ,因為創建的JavaScript函數將在客戶端進行所需的驗證。

因此,基本上,ASP.NET驗證控件有助於從客戶端和服務器端驗證ASP.NET頁,並且與純JavaScript驗證相比具有優勢。

另一個示例是JQuery代碼(JavaScript庫),該代碼可用於執行客戶端驗證,例如驗證文本框的值是否為空。 同時,通過對服務器端Web服務方法的AJAX調用,可以使用JQuery進行服務器端驗證。

使用ASP.Net驗證服務器控件時,您仍然想在嘗試將數據保存到服務器端之前仔細檢查該Page.IsValid

根據MSDN,這些控件在客戶端注入了某種javascript驗證;

默認情況下,驗證器控件將客戶端ECMAScript(JavaScript)注入頁面以在瀏覽器中執行驗證檢查。 這為用戶提供了有關驗證錯誤的即時反饋; 如果沒有客戶端腳本,則檢查驗證錯誤將需要往返服務器,這有時可能很慢。 實際上,在客戶端驗證成功之前,您無法提交頁面

https://msdn.microsoft.com/en-us/library/a0z2h4sw.aspx

一些控件還具有服務器驗證選項,如果需要,可以使用該選項:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args){
try 
{ 
    DateTime.ParseExact(args.Value, "m/d/yyyy", 
        System.Globalization.DateTimeFormatInfo.InvariantInfo); 
    args.IsValid = true; 
} 
catch 
{ 
   args.IsValid = false; 
}}

您也可以檢查Page.IsValid

ASP.NET驗證控件可用於客戶端和服務器端驗證。 驗證控件始終在服務器上執行驗證。 他們還具有完整的客戶端實現。 使用EnableClientScript屬性可以指定是否啟用客戶端驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM