ASP.NET客户端与服务器端验证

问题描述:

我经常从学校的“讲师”得到不正确的信息。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

您在混合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

使用ASP.Net验证服务器控件时,您仍然希望在尝试将数据保存在服务器端之前仔细检查该Page.IsValid

+0

我该怎么做?通过把if(IsValid),然后需要任何代码来处理它里面的应用程序? – Programmer7

+0

这在这里解释得很好:http://stackoverflow.com/questions/13762467/how-does-page-isvalid-work – dperish

根据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属性指定是否启用客户端验证。