【发布时间】:2011-10-17 13:54:11
【问题描述】:
我正在处理一个页面,我得到一个 Page.IsValid = false 并且我正在尝试确定哪个控件导致了验证问题。
【问题讨论】:
标签: asp.net controls validation
我正在处理一个页面,我得到一个 Page.IsValid = false 并且我正在尝试确定哪个控件导致了验证问题。
【问题讨论】:
标签: asp.net controls validation
接受的答案允许您找到失败的验证器的验证消息。如果您想查找未通过验证的控件的 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
【讨论】:
感谢 Steven 提供此答案,但我必须对其进行一些更改才能使其正常工作,因为 this.Validators.Where() 有一些问题。
using System.Linq;
List<IValidator> errored = this.Validators.Cast<IValidator>().Where(v => !v.IsValid).ToList();
【讨论】:
Page.Validators 对我不起作用.. 是的,有人还在使用 WebForms... bleh。但是这个答案很好用。谢谢+1
要检查哪个 Validator 被触发,只需检查 Firebug 中的 HTML,如果任何 Validator 没有 display:none; 属性或在其属性中具有 visibility:visible,那么它就是导致 @ 987654325@false.
【讨论】:
在代码 (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
在标记中,您可以...
【讨论】:
this.Validators.Where(v => !v.IsValid)。
ValidatorCollection 没有实现 IEnumerable<IValidator> 但你可以使用 var v = Validators.Cast<IValidator>().Where(v => !v.IsValid);