ASP.NET TreeView javascript перед обратной передачей

Я пытаюсь закодировать то, что, по моему мнению, является довольно обычным шаблоном AJAX, используя TreeViews и UpdatePanels. Моя ситуация такова:

У меня есть TreeView в UpdatePanel. У меня есть Literal внутри другой UpdatePanel. Когда пользователь нажимает на node внутри TreeView, содержимое Literal обновляется. Теперь, поскольку все это асинхронно, есть временное отставание между щелчком и обновлением содержимого Literal. За это время я хотел бы сделать две вещи:

1) Показать UpdateProgress и

2) Очистите содержимое Literal

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

Я не могу найти простой способ выполнить (2). Я читал обратные вызовы на стороне клиента и использовал GetCallbackEventReference, но это похоже на очень сложный подход к тому, что кажется простой проблемой.

В идеале я хотел бы оставить TreeView самостоятельно, чтобы он работал. Я не хочу получать содержимое самостоятельно и добавлять их в TreeView с помощью JS. Я просто хотел бы обнаружить событие изменения node на стороне клиента, очистить Literal и позволить TreeView продолжать свою нормальную работу.

Возможно ли это? Или клиентский вызов поддерживает мой единственный вариант?

2 ответа

Вам захочется играть с PageRequestManager из библиотеки ASP.NET AJAX. Здесь ссылка MSDN для PRM ​​- http://msdn.microsoft.com/en-us/library/bb311028.aspx.

Только для предупреждения Microsoft заявила, что TreeView может быть проблематичным в UpdatePanel, и вы также захотите быть очень осторожны с производительностью, особенно если у вас есть большой TreeView (см. мой статья об оптимизации производительности UpdatePanel - http://www.aaron-powell.com/blog.aspx?id=1195). Вы должны действительно посмотреть на что-то вроде плагина jQuery (например: http://bassistance.de/jquery-plugins/jquery-plugin-treeview/).

Но чтобы ответить на ваш вопрос, вам нужно:

  • У вас есть обработчик событий BeginRequest, который затем очистит ваш литерал и даже может показать загрузку (я не поклонник UpdateProgress, я предпочитаю гораздо более гранулированный контроль, который я получаю от этого).
  • Используйте событие EndRequest, чтобы убедиться, что компонент Загрузка исчезает

Вы также можете сделать TreeView a AsyncPostbackTrigger второй UpdatePanel на странице или просто вызвать метод Update на нем во время async-обратной передачи TreeView


У меня была та же проблема и исправлена ​​ее, создав скрытый элемент html, который перекрывает область, которую я хочу скрыть. Я показываю его onSubmit и скрываю его в window.onload во время обратной передачи. Это некрасиво, но оно работает и должно быть быстрым.

licensed under cc by-sa 3.0 with attribution.