2016-09-18 143 views
1

我經常從學校的「講師」得到不正確的信息。ASP.NET客戶端與服務器端驗證

對於ASP.NET Web應用程序,像CompareValidator,RangeValidator,RequiredFieldValidator等工具箱中的驗證器是那些被認爲是服務器端驗證的驗證器?

因爲我們還添加了一個jQuery NuGet包,它在用戶選項卡時提供實時驗證,就像用戶在需要輸入數字時鍵入字母一樣。

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

下面是一個例子:

<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的)一部分?

+0

我不這麼認爲,所以你需要做到WPF的方式。就網頁而言,已經存在的驗證器就足夠了。 – Manish

+0

因此,RequiredFieldValidator,RangeValidator等被認爲是ASP.NET的服務器端驗證?我已經知道如何使用JavaScript或jQuery在HTML頁面上進行客戶端驗證,但與WPF或Windows窗體驗證相比,ASP.NET驗證看起來太簡單了。 – Programmer7

+0

是的,你可以說它是這樣工作的。答:是的,它比WPF容易,並且jQuery和HTML5驗證更容易實現,並提供廣泛的驗證... – Manish

回答

2

您在混合ASP.NET驗證控件以及客戶端和服務器端驗證之間的區別。

當ASP.NET頁面呈現,則驗證控件RequiredFieldValidator的RangeValidator控件,將創建JavaScript函數在瀏覽器上進行驗證,並執行客戶端驗證。

IsValid是ASP.Net頁的服務器端驗證功能,通過該驗證Asp.Net驗證控制置於已經執行驗證,並且在服務器側,如果被施加所有的驗證然後IsValid變爲真。

請注意,不是必需的IsValid放在服務器端代碼中。在這種情況下,所創建的JavaScript將在客戶端執行所需的驗證。

因此,基本上ASP.NET驗證控制允許從客戶端和服務器端驗證ASP.NET頁面,並且與普通的JavaScript驗證相比具有優勢。

另一個例子是JQuery代碼(這是JavaScript),它只能用於執行客戶端驗證,如檢查文本框是否爲空。此外,它也可以用於通過AJAX調用Web服務來進行服務器端驗證。

+0

感謝您的信息。但是,如果用戶禁用JavaScript,我的方式仍然會執行服務器端驗證? – Programmer7

+0

是的,服務器端驗證將起作用,只有客戶端JavaScript不起作用。如果您使用JQuery執行對Web服務的AJAX調用,那麼這也不起作用。因此,大多數現代網站,如谷歌等不允許繼續,如果JS被禁用。 – GauravKP

0

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

+0

我該怎麼做?通過把if(IsValid),然後需要任何代碼來處理它裏面的應用程序? – Programmer7

+0

這在這裏解釋得很好:http://stackoverflow.com/questions/13762467/how-does-page-isvalid-work – dperish

0

根據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

0

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