我正在处理一个页面,发现Page.IsValid = false,我试图确定是哪个控件导致了验证问题。
我正在处理一个页面,发现Page.IsValid = false,我试图确定是哪个控件导致了验证问题。
感谢Steven提供的答案,但是由于this.Validators.Where()存在一些问题,我不得不进行了一些更改以使它起作用。
using System.Linq;
List<IValidator> errored = this.Validators.Cast<IValidator>().Where(v => !v.IsValid).ToList();
在代码(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)
。 - StevenValidatorCollection
没有实现 IEnumerable<IValidator>
接口,但你可以使用 var v = Validators.Cast<IValidator>().Where(v => !v.IsValid);
。 - Tim Schmelter接受的答案允许您找到验证失败的验证器的验证消息。如果您想查找未通过验证的控件的ID,可以将验证器转换为BaseValidator并公开ControlToValidate
属性。例如:
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
要检查哪个Validator
正在触发,请检查Firebug中的HTML,如果任何一个Validator
没有display:none;
属性或者在其属性中具有visibility:visible
,那么它就是导致Page.IsValid
false
的原因。
Page.Validators
对我没用.. 是的,还有人在使用 WebForms... 呃。但这个答案很好用。谢谢 +1 - Piotr Kula'if (Page.IsValid) { // do something } else {
// 页面无效 List<IValidator> invalides = this.Validators.Cast<IValidator>().Where(v => !v.IsValid).ToList(); foreach (var invalid in invalides) { Debug.WriteLine(invalid.ErrorMessage); } }' - CAK2