Я работаю со страницей, и я получаю файл Page.IsValid = false, и я пытаюсь определить, какой элемент управления вызывает проблему проверки.
Как вы определяете, какой валидатор не удалось?
Ответ 1
В коде (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
В разметке вы можете...
- Вы можете поместить текст на свой валидатор (например, Звездочка...)
- Или используйте элемент validation_summary (который требует сообщения об ошибке на вашем валидаторе)...
Ответ 2
Подтвердите Steven для этого ответа, но мне пришлось внести некоторые изменения, чтобы он работал как this.Validators.Where() имел некоторые проблемы.
using System.Linq;
List<IValidator> errored = this.Validators.Cast<IValidator>().Where(v => !v.IsValid).ToList();
Ответ 3
Чтобы проверить, какой из Validator
запущен, просто проверьте HTML в Firebug и если какой-либо Validator
не имеет свойства display:none;
или имеет visibility:visible
в своих свойствах, то это тот, который вызывает Page.IsValid
false
.
Ответ 4
Принятый ответ позволяет найти сообщение о валидации недействительного валидатора. Если вы хотите найти идентификатор элемента управления, который не прошел проверку, это можно получить, переведя валидатор в 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