Я вызвал цикл обратной передачи, используя Javascript Onload для запуска образа updateprogress
У меня есть страница asp.net, которая должна заполнить древовидную структуру на основе структуры каталогов. Вместо того, чтобы пользователь смотрел на пустую страницу при создании узлов, я пытаюсь использовать UpdateProgress для загрузки изображения.
Поиск по различным темам в Интернете дал мне несколько разных вещей, которые я пробовал, и у каждой из них есть свои проблемы, которые я не могу решить.
Вариант 1 использует следующий JavaScript:
function pageLoad() {
__doPostBack('btnBuildTree', '');
}
Это событие автоматически подключено, поэтому мне не нужно добавлять тег onload к элементу body. Для тестирования мой код выглядит так:
protected void btnBuildTree_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
// minor code here to know it did something
}
Когда я настроил это так, страница загружается, процесс обновления выполняется так, как я хочу, и когда btnBuildTree_Click завершает обновления UpdatePanel, и все замечательно, за исключением того, что он немедленно запускает другую обратную передачу, запускает функцию javascript pageLoad(), что заставляет btnBuildTree выполнять обратную передачу и так далее.
Вариант 2 имеет только одно изменение, и это касается JavaScript:
function buildTree() {
__doPostBack('btnBuildTree', '');
}
И я добавляю этот тег:
<body onload="buildTree()">
С этой настройкой страница загружается, событие btnBuildTree_Click запускается и выполняет всю свою работу, а когда оно закончено, оно не вызывает другую обратную передачу, поэтому у меня нет цикла. Единственным недостатком этого является то, что UpdateProgress никогда не показывается, поэтому он побеждает саму цель создания "экрана загрузки".
Я считаю, что я просто что-то упускаю, и я надеюсь, что кто-то может указать, что это такое.
Спасибо!
2 ответа
Ваша функция pageLoad() вызывается для всех обратных передач, включая асинхронные обратные передачи. В функции pageLoad() вы можете добавить логику, чтобы узнать, отображалось ли древовидное представление.
Предполагая, что вы удалите индикатор загрузки после отображения дерева, вы можете сделать что-то вроде:
function pageLoad() {
var loading = $("#treeview-loading"); // Using jQuery to find the loading indicator.
if (loading.get(0)) {
__doPostBack('btnBuildTree', '');
}
}
Как вы добавляете JS для загрузки страницы?
Если это добавлено Page_Load
с помощью RegisterStartupScript
или похож, добавить !IsPostBack
убедитесь, что он не будет заново добавлять себя каждый раз, когда вызывается обработчик событий btnBuildTree_Click.