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

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

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

1) Показать прогресс обновления и

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

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

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

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

Это возможно? Или обратный звонок клиента - мой единственный вариант?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
3 653
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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, чтобы убедиться, что компонент Loading исчезает

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

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

Другие вопросы по теме