Подтвердить что ты не робот

Как вы определяете, какой валидатор не удалось?

Я работаю со страницей, и я получаю файл Page.IsValid = false, и я пытаюсь определить, какой элемент управления вызывает проблему проверки.

4b9b3361

Ответ 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