ASP.Net, Drag-n-Drop, обратные передачи и идентификаторы управления - PullRequest
0 голосов
/ 12 марта 2009

Заголовок пытается обобщить проблему, но вот более подробное резюме: наша веб-страница представляет собой набор пользовательских контролов, которые визуально отображаются в виде прямоугольных виджетов отчетов, которые установлены в панелях обновления AJAX. Мы даем пользователю возможность перетаскивать виджеты в заранее заданные «зоны» на странице.

Функциональность перетаскивания работает отлично. Мы используем вызовы AJAX для веб-службы, чтобы обновить базу данных новыми настройками пользователя для сохранения.

«Однако» происходит, когда мы выполняем обратную передачу от одного из этих виджетов. Обратная передача отправляется на сервер, она отображает обновление, которое отправляется обратно клиенту (все через AJAX, из-за панели обновления). Затем мы получаем сообщение «Не удалось найти UpdatePanel with ID ...» на клиенте, поскольку иерархия документов изменилась, но идентификаторы элементов управления не были обновлены на клиенте.

Мы попробовали решение Рика Страла для этого текста ссылки , которое позволило нам создавать статические идентификаторы управления на клиенте. Это нарушает функциональность обратной передачи, хотя ... свойство isPostBack не установлено, я предполагаю, потому что сервер не может сопоставить идентификатор элемента управления с известным элементом иерархии.

Мы подумываем о возможности сброса идентификатора элемента управления на стороне клиента после его перетаскивания с использованием Javascript. Очевидно, что для этого потребуется дублирование алгоритма именования .Net - мы думаем, что это не умно. Может быть, мы можем использовать отдельную панель обновлений и попросить сервер отправить нам новый идентификатор элемента управления после его удаления?

Очевидно, у нас заканчиваются идеи.

Я понимаю, что это, вероятно, слишком долго, и я с удовольствием отредактирую, предоставлю примеры кода и т. Д., Чтобы помочь вам помочь нам. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 12 марта 2009

Просто из интереса, проверяли ли вы идентификатор UpdatePanel, который отправляет обратно, и является ли ожидаемый идентификатор? Вы можете подключиться к жизненному циклу клиентской страницы ASP.NET AJAX, например, чтобы проверить идентификатор элемента управления, инициирующего обратную передачу

<script type="text/javascript">

  function pageLoad(sender, args)
  {
      var prm = Sys.WebForms.PageRequestManager.getInstance();

      prm.add_initializeRequest(InitializeRequest);
      prm.add_endRequest(EndRequest);

      //fires when an async postback is initialized
      function InitializeRequest(sender, args) 
      {
        alert(args._postBackElement.id)
      }

      //fires when an async postback is complete
      function EndRequest(sender, args) 
      {
        alert(sender._postBackSettings.sourceElement.id)
      }
  }

</script>
0 голосов
/ 12 марта 2009

Вы можете использовать встроенную систему ASp.Net для перетаскиваемых элементов страницы, называемых WebParts.

Система работает с постбэками и может быть легко реализована с помощью Visual Studio

Ищите учебники для веб-частей, такие как:

http://www.ondotnet.com/pub/a/dotnet/2005/01/10/liberty.html

Надеюсь, это поможет

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