如何:以编程方式验证 ASP.NET 服务器控件

更新:2007 年 11 月

默认情况下,在页回发到服务器时、页初始化之后(即视图状态和回发数据已处理之后)和调用事件处理代码之前,ASP.NET 验证控件将自动执行验证。如果浏览器支持客户端脚本,控件也可以在浏览器中执行验证。

但是,有时您可能需要以编程方式执行验证。在以下情况下,您可能需要通过编程来进行验证:

  • 如果验证值在运行时尚未设置。例如,如果您正在使用 RangeValidator 控件,您可能需要根据用户输入的值在运行时设置其 MinimumValueMaximumValue 属性。此时默认的验证不起作用,因为当页调用验证控件执行验证时,RangeValidator 控件中没有足够的信息。

  • 需要确定 Page_Load 事件处理程序中的控件(或整个页)的有效性。在页的处理阶段,验证控件尚未调用,因此页或单独控件的 IsValid 属性也未设置。(如果试图获取该属性的值,将引发异常。)但如果要确定有效性,您能以编程方式调用验证。

  • 您正在运行时编辑控件(或者输入控件或者验证控件)。

更加常见的是,您可以在需要的时候随时通过编程进行验证,以便在验证执行时进行更加精确的控制。

hxet6xwx.alert_security(zh-cn,VS.90).gif安全说明:

默认情况下,ASP.NET 网页自动验证是否有恶意用户试图向您的应用程序发送脚本或 HTML 元素。如果您已禁用该功能,则可以自行调用 ValidateInput 方法。有关更多信息,请参见脚本侵入概述

通过编程进行验证

  • 调用验证控件的 Validate 方法。

    该控件将执行检查并设置控件和页的 IsValid 属性。如果检测到错误,那么当页返回到用户时,将照常显示错误信息。

    下面的代码示例演示如何以编程方式设置属性。在这种情况下,一个 ASP.NET 网页在度假地预定房间,以便在每次访问时提供自由的往返。用户必须输入到达日期和离去日期,然后计划访问期间的日程。RangeValidator 控件用于确保用户输入典型的日期格式,旅行日期应该介于到达和离去日期之间。

    hxet6xwx.alert_note(zh-cn,VS.90).gif说明:

    如果用户输入的值无法转换为日期,验证程序控件将引发异常。为清楚起见,此示例未包含错误处理部分。

    到达和离去日期来自于页上的两个 TextBox Web 服务器控件,即 txtArrival 和 txtDeparture。旅行日期输入到第三个 TextBox 控件中,即 txtTourDate,该控件由 RangeValidator 控件进行验证。

    hxet6xwx.alert_note(zh-cn,VS.90).gif说明:

    用编程方式进行验证时,应该禁用客户端脚本,以便控件不会在您的服务器端验证代码执行之前显示不正确的错误信息。有关详细信息,请参见如何:禁用 ASP.NET 服务器控件验证

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
     System.EventArgs) Handles Button1.Click
        RangeValidator1.MinimumValue = txtArrival.Text
        RangeValidator1.MaximumValue = txtDeparture.Text
        RangeValidator1.Type = ValidationDataType.Date
        RangeValidator1.Validate()
    
        If Not RangeValidator1.IsValid Then
            RangeValidator1.ErrorMessage = "The tour date must " & _
            "fall between the arrival and departure dates."
        End If
    End Sub
    
    private void Button1_Click(object sender, System.EventArgs e)
    {
        RangeValidator1.MinimumValue = txtArrival.Text;
        RangeValidator1.MaximumValue = txtDeparture.Text;
        RangeValidator1.Type = ValidationDataType.Date;
        RangeValidator1.Validate();
    
        if (!RangeValidator1.IsValid)
        {
            RangeValidator1.ErrorMessage = "The tour date must " +
            "fall between the arrival and departure dates.";
        }
    }
    

请参见

概念

ASP.NET 服务器控件验证类型

其他资源

验证 ASP.NET 控件