Я пытаюсь закодировать то, что я считаю довольно обычным шаблоном AJAX, используя TreeViews и UpdatePanels. Моя ситуация такова:
У меня есть TreeView в UpdatePanel. У меня есть Literal в другой UpdatePanel. Когда пользователь щелкает узел в TreeView, содержимое Literal обновляется. Теперь, поскольку все это асинхронно, конечно, существует задержка во времени между щелчком и обновлением содержимого Literal. За это время я хотел бы сделать две вещи:
1) Показать прогресс обновления и
2) Очистить содержимое Literal
Это сделано для того, чтобы пользователю не приходилось смотреть на старое содержимое, пока новый текст загружается асинхронно.
Кажется, я не могу придумать простого способа выполнить (2). Я читал об обратных вызовах на стороне клиента и использовал GetCallbackEventReference, но это кажется очень сложным подходом к тому, что, казалось бы, является простой проблемой.
В идеале я хотел бы оставить TreeView в покое, чтобы он работал. Я не хочу сам получать содержимое и добавлять его в TreeView с помощью JS. Я просто хотел бы обнаружить событие изменения узла на стороне клиента, очистить Literal и позволить TreeView продолжить свою обычную работу.
Это возможно? Или обратный звонок клиента - мой единственный вариант?





Вы захотите поиграть с 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 во время обратной передачи. Это некрасиво, но работает и должно быть быстро.