如何:以编程方式测试 ASP.NET 服务器控件的有效性

更新:2007 年 11 月

验证控件测试用户输入,设置错误状态,并生成错误信息。它们不会更改页的处理流程,例如,在检测到用户输入错误时不会略过代码。取而代之的是,您将在执行应用程序的特定逻辑之前在代码中测试控件的状态。如果检测到错误,您自己的代码将无法运行;页将继续处理并返回给用户,并向其显示错误信息。

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

默认情况下,ASP.NET 网页自动验证是否有恶意用户试图向您的应用程序发送脚本或 HTML 元素。有关更多信息,请参见脚本侵入概述

您可以测试常规的页范围的状态,并且可以测试单独控件的状态。通常,您在为页创建的事件处理程序中完成上述工作。

测试常规错误状态

  • 在您的代码中,测试页的 IsValid 属性。此属性将累计页上所有验证控件的 IsValid 属性的值(使用逻辑 AND),如果有任何验证控件设置为无效,页的属性都将返回 false。

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

    验证信息在页的初始化或加载阶段不可用。但是,您可以在 Page_Load 期间手动调用 Validate 方法,然后测试页的 IsValid 属性。有关页状态的详细信息,请参见 ASP.NET 页生命周期概述

    下面的代码示例演示按钮的事件处理程序。该代码测试页的 IsValid 属性。请注意,在此无需其他子句,原因是页将自动返回到浏览器,并且验证控件将显示其自己的错误信息。

    Public Sub Button1_Click(ByVal sender As Object, _
    ByVal e As System.EventArgs) _
    Handles Button1.Click
    
        If Me.IsValid Then
            ' Perform database updates or other logic here
        End If
    End Sub
    
    void Button1_Click(object sender, System.EventArgs e)
    {
        if (IsValid)
        {
            // Perform database updates or other logic here.
        }
    }
    

测试单独控件的错误状态

  • 依次通过页的 Validators 集合,该集合包含对于所有验证控件的引用。您可以随后检查每个验证控件的 IsValid 属性。

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

    如果希望在 Page_Load 期间执行该检查,则必须首先手动调用 Validate 方法。

    下面的代码示例演示如何获取单个验证控件的状态。

    If (Me.IsPostBack) Then
        Me.Validate()
        If (Not Me.IsValid) Then
            Dim msg As String
            ' Loop through all validation controls to see which 
            ' generated the error(s).
            Dim oValidator As IValidator
            For Each oValidator In Validators
                If oValidator.IsValid = False Then
                    msg = msg & "<br />" & oValidator.ErrorMessage
                End If
            Next
            Label1.Text = msg
        End If
    End If
    
    if (this.IsPostBack)
    {
        this.Validate();
        if (!this.IsValid)
        {
            string msg = "";
            // Loop through all validation controls to see which
            // generated the errors.
            foreach (IValidator aValidator in this.Validators)
            {
                if (!aValidator.IsValid)
                {
                    msg += "<br />" + aValidator.ErrorMessage;
                }
            }
            Label1.Text = msg;
        }
    }
    

请参见

任务

如何:控制 ASP.NET 服务器控件的验证错误信息显示

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

参考

在 ASP.NET 网页中验证用户输入