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

Валидаторы ASP.NET внутри UpdatePanel

Я использую более старую версию ASP.NET AJAX из-за ограничений времени выполнения, размещение ASP.NET Validator внутри панели обновлений не работает. Есть ли уловка, чтобы сделать эти работы, или мне нужно использовать элемент управления ValidatorCallOut, который поставляется с набором инструментов AJAX?

4b9b3361

Ответ 1

Я подозреваю, что вы используете оригинальную версию (RTM).NET 2.0.

До начала 2007 года элементы проверки валидатора не были совместимы с UpdatePanels. Это было разрешено с помощью пакета обновления 1 (SP1).NET Framework.

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

В ранних бета-версиях MS обновила UpdatePanel, чтобы угадать, какие сценарии необходимо повторно отобразить или запустить. Это не сработало хорошо, и они должны были его вынуть.

Чтобы обойти немедленную проблему, Microsoft выпустила исправленную версию классов валидатора в новой DLL под названием Validators.DLL и дала инструкции о том, как сообщить ASP.NET о том, чтобы использовать эти классы вместо реальных. Если вы используете Google для этого имени DLL, вы должны найти дополнительную информацию. См. Также Это сообщение в блоге.

Это была мера остановки, и вы не должны не использовать ее, если это возможно.

Реальное решение проблемы появилось вскоре после этого в .NET 2.0 SP1. Microsoft представила новый механизм регистрации скриптов в пакете обновления 1 и изменила классы действительного валидатора на использование этого механизма вместо старого.

Позвольте мне подробно рассказать об изменениях:

Традиционно вы должны регистрировать скрипты с помощью таких методов страницы, как page.RegisterStartupScript() и Page.RegisterClientScriptBlock(). Проблема в том, что эти методы не были предназначены для расширения, и UpdatePanel не смогла отслеживать эти вызовы.

В SP1 на странице с именем Page.ClientScripts появился новый объект свойства. У этого объекта есть методы для регистрации сценариев, которые эквивалентны (и в некотором смысле лучше) исходным. Кроме того, UpdatePanel может отслеживать эти вызовы, чтобы при необходимости повторять или называть методы. Старые методы RegisterStartupScript() и т.д. Устарели. Они все еще работают, но не внутри UpdatePanel.

Нет причин (кроме политики, я полагаю) не обновлять свои установки до .NET 2.0 SP1. Пакеты обновления содержат важные исправления.

Удачи.

Ответ 2

@Jonathan Holland: Что не так с использованием Validators.dll?

Поскольку они заменяют исходные классы, вы спокойно обходите любые ошибки и исправления безопасности, улучшения и т.д., которые Microsoft может опубликовать в будущем (или, возможно, уже выпустила). Если вы не посмотрите внимательно на web.config, вы можете никогда не заметить, что вы пропускаете исправления.

Конечно, вы должны оценить каждую ситуацию. Если вы абсолютно застряли с использованием RTM.NET 2.0, то Validators.dll лучше, чем ничего.

Ответ 3

@jmein

На самом деле проблема заключается в том, что клиент Validator script не работает, если он помещен внутри updatePanel (UpdatePanels обновляется с использованием .innerHTML, который добавляет узлы script как текстовые узлы, а не script), поэтому браузер не запускает их).

Исправление - это исправление, выпущенное Microsoft, которое исправляет эту проблему. Я нашел его с помощью Google.

http://blogs.msdn.com/mattgi/archive/2007/01/23/asp-net-ajax-validators.aspx

Ответ 4

Если по какой-либо причине вы не можете использовать udpated версию элементов управления проверки ASP.NET, на самом деле очень просто проверить правильность группы проверки, все, что вам нужно сделать, это позвонить

Page_ClientValidate("validationGroupName");

Затем вы можете использовать PageRequestManager выполнить проверку, как вам нужно.

Определенно использование обновленных элементов управления проверкой - это путь, но я довольно частично отношусь к JavaScript;)