#.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:
Не удалось заставить его работать. Удален пользовательский валидатор и выполнены проверки внутри логики.