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

Rob*_*ert 29 asp.net validation controls

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

Ozz*_*rnz 22

感谢史蒂芬这个答案,但我不得不作出()一些改变它作为this.Validators.Where工作出现了一些问题.

using System.Linq;

List<IValidator> errored = this.Validators.Cast<IValidator>().Where(v => !v.IsValid).ToList();
Run Code Online (Sandbox Code Playgroud)

  • 它不像@Steven所说的那样有效,但这个答案是完美的.只需要为*Page*更改*this*.THKS (2认同)

Cha*_*ins 20

在代码(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
Run Code Online (Sandbox Code Playgroud)

在标记中,你可以......

  • 您可以在验证器上放置"文本"(如星号..​​....)
  • 或者使用validation_summary控件(需要验证器上的错误消息)...

  • 或者`this.Validators.Where(v =>!v.IsValid)`简称. (21认同)
  • 实际上很容易给我这个学分.只需单击评论左侧的"向上箭头"简单;-). (2认同)
  • 大声笑 - 我没有意识到你得到了积分.:-) (2认同)
  • @Steven_ 无法编译,因为`ValidatorCollection` 没有实现`IEnumerable&lt;IValidator&gt;`,但您可以使用`var v = Validators.Cast&lt;IValidator&gt;().Where(v =&gt; !v.IsValid); ` (2认同)

NYC*_*Net 6

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

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
Run Code Online (Sandbox Code Playgroud)