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

时间:2016-09-18 16:34:11

标签: c# asp.net validation webforms

我经常从学校的“讲师”那里得到不正确的信息。

对于ASP.NET Web应用程序,工具箱中的Validator,如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>

感谢

****** ***** EDIT

你的答案不清楚或不完整,就像我的“讲师”一样。

是或否请,这是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)部分?

4 个答案:

答案 0 :(得分:3)

您正在混合 ASP.NET验证控件以及客户端和服务器端验证之间的差异。

当ASP.NET页面呈现验证控件 RequiredFieldValidator RangeValidator 等时,它会自动创建客户端JavaScript函数以在浏览器中执行验证,即客户端验证。

IsValid是ASP.Net Pages的服务器端验证功能,用于验证WebForm / WebPage中使用的Asp.Net验证控件是否已执行验证,以及服务器端代码(如果所有)应用验证(即,如果输入了所有必填字段等),则IsValid变为真。

请注意非强制IsValid放入服务器端代码中,因为创建的JavaScript函数将在客户端执行必要的验证。

因此,基本上ASP.NET验证控件有助于从客户端和服务器端验证ASP.NET页面,并且与纯JavaScript验证相比具有优势。

另一个例子是 JQuery 代码(JavaScript库),可以用来进行客户端验证,例如验证文本框的值是否为空。同时,JQuery可用于通过对服务器端的Web服务方法的AJAX调用来进行服务器端验证。

答案 1 :(得分:0)

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

答案 2 :(得分: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

答案 3 :(得分:0)

ASP.NET验证控件可用于客户端和服务器端验证。验证控件始终在服务器上执行验证。他们还有完整的客户端实现。 使用EnableClientScript属性指定是否启用客户端验证。