Валидаторы ASP.NET внутри панели обновления - PullRequest
14 голосов
/ 28 августа 2008

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

Ответы [ 4 ]

21 голосов
/ 28 августа 2008

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

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

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

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

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

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

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

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

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

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

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

Удачи.

3 голосов
/ 28 августа 2008

@ Джонатан Холланд: что не так с использованием Validators.dll?

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

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

2 голосов
/ 28 августа 2008

@ jmein

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

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

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

0 голосов
/ 20 сентября 2008

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

Page_ClientValidate("validationGroupName");

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

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

...