У меня возникают проблемы с тем, что валидаторы не запускаются (не отображаются ожидаемые сообщения об ошибках) при использовании Page.Validate () из кода. Валидаторы размещаются внутри панели обновлений Ajax.
Кажется, есть загружаемые версии валидаторов Ajax. Я не уверен, нужны ли они мне или они уже есть в VS 2008 SP1. Когда форма публикуется с помощью кнопки, валидаторы работают, но они не работают, когда я выполняю Page.Validate () по запросу.





Вы вызывали обновление на панели обновлений?
Некоторое время назад они были включены в обновление для .Net framework, так что да, они у вас есть в VS2008 SP1. Я обнаружил проблему, когда метод на стороне сервера для CustomValidators срабатывает дважды без «злого» эффекта, но в остальном они работают нормально.
Что касается конкретной проблемы, с которой вы столкнулись, возможно, валидаторы не находятся внутри панели обновлений или какая-то другая панель в конечном итоге обновляется любым опубликованным элементом управления вместо того, который вам нужен? Или даже некоторые ValidationGroups где-то определены, и только они проходят валидацию? Очень сложно сказать, не видя кода.
Но убедиться, что ваши валидаторы отображаются, несложно: MyUpdatePanel.Update () принудительно обновит.
Да, валидаторы работают внутри UpdatePanel, но вам необходимо использовать как минимум SP1 для ASP.NET 2.0. Если вы используете SP1, вам не нужно и не следует использовать «версию ajax» валидаторов.
Более подробная информация по этой теме доступна здесь:
Я не хочу форсировать обновление. В определенных ситуациях я хочу проверить некоторые элементы формы, когда пользователь изменяет значение какого-либо элемента формы. Когда я пользователь вносит изменения, говоря радиокнопку или раскрывающийся список, происходит автоматическая обратная передача. Когда происходит обратная передача, я хочу, чтобы элементы управления проверкой срабатывали, как если бы я нажал кнопку отправки.
Для этих элементов управления, которые вызывают обратную передачу, включена проверка причины. Другой тест - в обработчике событий элемента управления, вызвавшего обратную передачу, у меня есть Page.Validate ().
Возникает вопрос, почему обратная передача кнопки запускает проверку, а не другой элемент управления, вызвавший обратную передачу?
Что ж, если вы хотите увидеть результаты проверки на стороне клиента, панель обновлений, где находятся валидаторы, будет обновлена потребности. В противном случае сообщения об ошибках не появятся. Каков результат Page.IsValid () в управляющих событиях, которые вы используете?
Не могли бы вы пояснить, что вы имеете в виду под «обновлением», когда говорите «Я не хочу форсировать обновление»? Если вы отправляете обратную передачу, UpdatePanel или нет, вы получите обновление страницы, даже если это может не выглядеть так для пользователя.
Я имел в виду, что не хочу использовать Update () панели. Я ожидаю, что обратная передача запустит валидаторы. Валидаторы находятся внутри панели обновлений. Все элементы управления сервером находятся внутри панели обновлений. IsValid верен, хотя этого не должно быть, потому что, когда я нажимаю кнопку отправки, я вижу сообщения.
Может быть, мы сможем взять это сверху. Вы можете на это ответить?
Обратите внимание, что ваши валидаторы ДОЛЖЕН находятся внутри обновленной UpdatePanel, чтобы они отображали сообщения об ошибках. Если они не находятся в обновленной UpdatePanel, валидаторы не могут изменить свой внешний вид в браузере.
Я закончил тем, что использовал один настраиваемый валидатор и выполнил свои собственные проверки в коде и установил сообщение об ошибке пользовательского валидатора. Таким образом, у меня было больше гибкости, и это сработало. При использовании Ajax это похоже на проверку на стороне клиента.
Я не пользуюсь обновлением. Панель обновлений используется только для обратной передачи.