Элементы управления ASP.NET и панели обновления - PullRequest
0 голосов
/ 19 февраля 2009

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

Я получаю серию ошибок, которые говорят о чем-то вроде: «Ошибка: Sys.InvalidOperationException: два компонента с одинаковым идентификатором« master_ctl40_CCB_PALETTES »не могут быть добавлены в приложение»

Есть идеи у кого-нибудь?

Ответы [ 3 ]

1 голос
/ 26 марта 2009

Попробуйте эти трюки:

  1. На Page_Load положить uxFailedControl.ID = DateTime.Now.ToString (); Он будет гарантировать, что ваш элемент управления будет иметь уникальный идентификатор при каждой перезагрузке страницы (полностью или частично), поэтому теоретически вы не должны видеть больше ошибок «тот же идентификатор».
  2. Если вы отображаете свой элемент управления в модальном всплывающем окне: каждый раз, когда вы скрываете всплывающее окно с сервера, удаляйте элемент управления из его контейнера (Panel, Page, Control и т. Д.). Используйте uxModalPopupPanel.Controls.Clear (); или uxModalPopupPanel.Remove (uxFailedControl);
  3. Когда вы закончите с отладкой, установите для свойства ScriptMode вашего ScriptManager значение "Release". Это предотвратит всплытие внутренних исключений AJAX в браузер.
0 голосов
/ 26 мая 2009

Похоже, ваш клиентский объект создается несколько раз.

Если вы хотите, чтобы ваши клиентские элементы управления заменялись при обновлении панели обновления, они должны наследоваться от Sys.UI.Control, который принимает элемент в своем конструкторе. Когда этот элемент заменяется панелью обновления, клиентский объект будет удален, а затем воссоздан. Если вы в настоящее время используете ScriptComponentDescriptor на стороне сервера для определения экземпляра клиентского элемента управления, вам нужно переключиться на ScriptControlDescriptor.

Судя по звукам, ваши клиентские объекты просто наследуются от Sys.Component, который будет зависать до тех пор, пока не будет удален вручную, поэтому вы получаете ошибку о наличии более одного компонента с одинаковым идентификатором.

Я бы не советовал использовать новый идентификатор каждый пост назад - это будет просто создавать новые клиентские объекты без очистки старых.

0 голосов
/ 19 февраля 2009

В каком случае вы добавляете компоненты на панель обновления? То есть Вы поместили их в событие загрузки страницы без проверки обратной передачи или поместили их в событие загрузки панели обновления? и т.д ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...