Работают ли стандартные валидаторы asp.net с панелью Ajax и обновлением?


1

У меня возникли проблемы с недействительными валидаторами (не ожидаются сообщения об ошибках) при использовании параметра Page.Validate() из кода. Валидаторы помещаются внутри панели обновления Ajax.

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

0

Вы вызвали обновление на своей обновленной панели?

  0

Я не использую обновление. Пакет обновления используется только для обратных передач. 23 сен. 082008-09-23 23:04:23


0

Они были включены в обновление для .Net framework некоторое время назад, так что да, вы имеете их в VS2008 SP1. Я нашел проблему, когда метод серверной стороны для CustomValidators срабатывает дважды без эффекта «зла», но в остальном они работают нормально.

Что касается конкретной проблемы, возникшей у вас, возможно, валидаторы не находятся внутри панели обновления, или какая-либо другая панель заканчивается тем, что обновляется каким-либо контролем, а не тем, который вам нужен? Или даже некоторые ValidationGroups определены где-то, и только они в конечном итоге проверяются? Это очень сложно сказать, не видя кода.

Но убедитесь, что ваши валидаторы показаны легко: MyUpdatePanel.Update() заставит обновить.


1

Да, валидаторы работают внутри UpdatePanel, но вам нужно использовать хотя бы SP1 ASP.NET 2.0. Если вы используете SP1, вам не нужно и не следует использовать «ajax-версию» валидаторов.

Более подробная информация по этому вопросу можно найти здесь:

StackOverflow: ASP.NET Validators inside an UpdatePanel


1

Я не хочу, чтобы заставить обновления. В некоторых ситуациях я хочу проверить некоторые элементы формы, когда пользователь меняет значение на некоторый элемент формы. Когда я делаю изменение, чтобы сказать радиокнопку или выпадающий список, происходит автоматическая обратная передача. Когда происходит обратная передача, я хочу, чтобы элементы управления проверки загорелись, как будто я нажал кнопку отправки.

Эти элементы управления, которые вызывают обратную передачу, имеют «причины валидации». Еще один тест в обработчике событий элемента управления, который вызвал обратную передачу, у меня есть страница. Validate().

Вопрос в том, почему кнопка postback запускает проверку, но не является другим элементом управления, который вызвал обратную передачу?

  0

Ну, если вы хотите увидеть результаты проверки на стороне клиента, обновленная панель, в которой находятся валидаторы **, нуждается в обновлении **. В противном случае сообщения об ошибках не появятся. Каков результат Page.IsValid() в управляющих событиях, которые вы используете? 23 сен. 082008-09-23 23:15:03

  0

Можете ли вы уточнить, что вы подразумеваете под «обновлением», когда вы говорите «Я не хочу принудительно обновлять»? Если вы отправляете postback, UpdatePanel или нет, вы получите обновление страницы, даже если оно может выглядеть не так. 23 сен. 082008-09-23 23:15:35

  0

Я имел в виду, что не хочу использовать Update() панели. Я ожидаю, что postback вызовет валидаторы. Валидаторы находятся внутри панели обновления. Все элементы управления сервером находятся внутри панели обновления. IsValid является истинным, когда это не должно быть, потому что, когда я нажимаю кнопку отправки, я вижу сообщения. 23 сен. 082008-09-23 23:44:46


1

Возможно, мы можем взять его сверху. Можете ли вы ответить на них?

  • Вы используете .NET 2.0 SP1 или выше?
  • Являются ли ваши элементы проверки подлинности внутри UpdatePanel или снаружи?
  • Вы используете свой сайт с отключенным javascript (очень маловероятным)?

Обратите внимание, что валидаторы MUST быть внутри обновленной UpdatePanel для их отображения сообщений об ошибках. Если они не находятся в обновленном UpdatePanel, валидаторы не могут изменить свой внешний вид в браузере.


0

Я закончил использовать один пользовательский валидатор и выполнил собственные проверки кода и установил сообщение об ошибке пользовательского валидатора. Таким образом, у меня была больше гибкости, и это сработало. Используя Ajax, он чувствует себя как подтверждение на стороне клиента.