Пользовательский идентификатор на стороне сервера (asp vb.net ) не запускается

#.net #vb.net #validation #customvalidator

#.net #vb.net #проверка #пользовательская проверка

Вопрос:

Я знаю, что об этом часто спрашивали, но у меня есть пользовательский валидатор на стороне сервера, который не запускается, и я не могу найти почему (кроме того, я скопировал примеры, которые работают из других мест, и не могу заставить его работать …)

Код:

 <asp:CustomValidator ID="MyValidator" runat="server" ErrorMessage="My error message" OnServerValidate="MyValidator_OnServerValidate" />
  

Функция проверки

     Protected Sub MyValidator_OnServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles MyValidator.ServerValidate
    Dim i As Integer
    i = 0
    args.IsValid = False
End Sub
  

Это последний тест, который я выполняю (скопирован из другого вопроса), но я также попытался прикрепить средство проверки к одному элементу управления (и добавить ValidateEmptyText) и удалить handles MyValidator.ServerValidate и добавить его в тег с помощью onServerValidate .

(Обычно я программист на Java, поэтому это может быть очень простой ошибкой, которую я должен был заметить, не недооценивайте мое невежество в .Net)

Заранее спасибо

РЕДАКТИРОВАТЬ: добавьте код для кнопки отправки…

 <asp:Button ID="lbGuardar" runat="server" CssClass="button" Text="Guardar" CausesValidation="true" ></asp:Button>
  

ПРАВКА 2: Добавлено Page.validate() в мой код кнопки, и это не вызывает серверную часть валидатора. Кроме того, вызывается пользовательский валидатор (по крайней мере, на стороне клиента / javascript, но не на стороне сервера)

Ответ №1:

С самого начала я бы попробовал изменить защищенный подраздел на общедоступный.

РЕДАКТИРОВАТЬ: я только что протестировал ваш код, и то, что у вас есть, работает для меня. Я зашел в Debug и нажал кнопку, которая отправила сообщение туда, где оно было введено в MyValidator.Сначала выполните серверную проверку, как и должно быть. Это делает страницу недействительной и показывает сообщение об ошибке.

Комментарии:

1. Может быть, мне не хватает какой-то дополнительной конфигурации? Возможно ли, что visual Studio не изменяет какой-либо базовый файл?

2. Не уверен. Как выглядит объявление вашей страницы? Мой тест, который я запустил, имеет <%@ Page Language="VB" AutoEventWireup="true" CodeBehind="TestPage.aspx.vb" Inherits="TestApp.TestPage" %>

3. <%@ Control Language="vb" AutoEventWireup="false" CodeBehind="ucAltaCliente.ascx.vb" Inherits="SGI08.ucAltaCliente" %> но я изменил AutoEventWireup на true, и это тоже не сработало… Если это помогает, другие требуемые проверки в приложении работают…

4. Попробуйте другую страницу. Просто создайте тестовую страницу и используйте тот же код. Иногда я обнаруживал, что если создать новую страницу и скопировать / вставить старую в новую, это исправляет подобные странные ошибки.

5. Не сработало… Я также удалил все ссылки на средства проверки, добавил некоторые requiredfieldvalidator, и они сработали, но когда я добавил пользовательские проверки, они не работают…

Ответ №2:

Должен быть общедоступным методом и не нуждается в дескрипторах.

 Public Sub MyValidator_OnServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs)

    Dim i As Integer
    i = 0
    args.IsValid = False

End Sub
  

Комментарии:

1. Каким образом это не работает. Если вы устанавливаете точку останова для метода, это срабатывает, или она даже не достигает этого?

2. Он не достигает точек останова внутри onServerValidate . Это странно, потому что, если я добавляю проверку на стороне клиента, она вызывается, но проверка сервера не вызывается, даже если я программно принудительно запускаю Page.validate()… [Я всегда выполняю отладку с точкой останова в методе, и она никогда не достигает …]

3. Хм. Вы пробовали создать новый серверный элемент управления с другим пользовательским валидатором, чтобы посмотреть, сработает ли он? Лично я бы попробовал создать новый проект с нуля и проделать то же самое, чтобы посмотреть, работает ли это, а затем сравнить различия.

4. Новый проект сработал… не нашел никакой интересной разницы, продолжу поиск

Ответ №3:

Не удалось заставить его работать. Удален пользовательский валидатор и выполнены проверки внутри логики.