Заголовок пытается обобщить проблему, но вот более подробное резюме: наша веб-страница представляет собой набор пользовательских контролов, которые визуально отображаются в виде прямоугольных виджетов отчетов, которые установлены в панелях обновления AJAX. Мы даем пользователю возможность перетаскивать виджеты в заранее заданные «зоны» на странице.
Функциональность перетаскивания работает отлично. Мы используем вызовы AJAX для веб-службы, чтобы обновить базу данных новыми настройками пользователя для сохранения.
«Однако» происходит, когда мы выполняем обратную передачу от одного из этих виджетов. Обратная передача отправляется на сервер, она отображает обновление, которое отправляется обратно клиенту (все через AJAX, из-за панели обновления). Затем мы получаем сообщение «Не удалось найти UpdatePanel with ID ...» на клиенте, поскольку иерархия документов изменилась, но идентификаторы элементов управления не были обновлены на клиенте.
Мы попробовали решение Рика Страла для этого текста ссылки , которое позволило нам создавать статические идентификаторы управления на клиенте. Это нарушает функциональность обратной передачи, хотя ... свойство isPostBack не установлено, я предполагаю, потому что сервер не может сопоставить идентификатор элемента управления с известным элементом иерархии.
Мы подумываем о возможности сброса идентификатора элемента управления на стороне клиента после его перетаскивания с использованием Javascript. Очевидно, что для этого потребуется дублирование алгоритма именования .Net - мы думаем, что это не умно. Может быть, мы можем использовать отдельную панель обновлений и попросить сервер отправить нам новый идентификатор элемента управления после его удаления?
Очевидно, у нас заканчиваются идеи.
Я понимаю, что это, вероятно, слишком долго, и я с удовольствием отредактирую, предоставлю примеры кода и т. Д., Чтобы помочь вам помочь нам. Заранее спасибо.