Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

Это была мера пресечения, и вам следует не использовать его избегайте этого, если это возможно.

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

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

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

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

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

Удачи.

Другие советы

@Джонатан Холланд:Что плохого в использовании Validators.dll?

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

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

@jmein

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

Исправление было выпущено корпорацией Майкрософт, которое устраняет эту проблему.Я нашел это с помощью Google.

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

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

Page_ClientValidate("validationGroupName");

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top