您如何确定哪个验证器失败?

时间:2011-08-01 15:52:17

标签: asp.net controls validation

我正在使用页面,我收到一个Page.IsValid = false,我正在尝试确定哪个控件导致了验证问题。

4 个答案:

答案 0 :(得分:20)

归功于Steven这个答案,但我不得不对它进行一些更改才能起作用.Validators.Where()有一些问题。

using System.Linq;

List<IValidator> errored = this.Validators.Cast<IValidator>().Where(v => !v.IsValid).ToList();

答案 1 :(得分:19)

在代码(page_load)中,您可以这样做:
(根据MSDN:http://msdn.microsoft.com/en-US/library/dh9ad08f%28v=VS.80%29.aspx

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

在标记中,您可以...

  • 你可以在你的验证器上加上“text”(就像一个 星号...)
  • 或使用validation_summary控件(需要在验证器上显示错误消息)...

答案 2 :(得分:2)

接受的答案允许您找到失败的验证程序的验证消息。如果要查找未通过验证的控件的 ID ,可以通过将验证程序转换为公开ControlToValidate属性的BaseValidator来获取该函数。例如:

For Each v As BaseValidator In Page.Validators
    If Not v.IsValid Then
        ' You can see the control to validate name and error message here.
        Debug.WriteLine(v.ControlToValidate)
        Debug.WriteLine(v.ErrorMessage)
    End If
Next

答案 3 :(得分:1)

要检查哪个Validator被解雇,只需检查Firebug中的HTML,以及任何Validator是否没有display:none;属性,或者其属性中是visibility:visible那么它是导致Page.IsValid false的那个。