Я вызвал цикл обратной передачи, используя Javascript Onload для запуска образа updateprogress - PullRequest
0 голосов
/ 30 июня 2011

У меня есть страница 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 ]

0 голосов
/ 30 июня 2011

Ваша функция pageLoad () вызывается для всех обратных передач, включая асинхронные обратные передачи.В функции pageLoad () вы можете добавить логику, чтобы узнать, отображалось ли древовидное представление.

Если вы удалите индикатор загрузки после отображения древовидного представления, вы можете сделать что-то вроде:

function pageLoad() {
   var loading = $("#treeview-loading"); // Using jQuery to find the loading indicator.
   if (loading.get(0)) {
      __doPostBack('btnBuildTree', '');
   }
}
0 голосов
/ 30 июня 2011

Как вы добавляете js для загрузки страницы?

Если это добавлено в Page_Load с использованием RegisterStartupScript или аналогично, добавьте проверку !IsPostBack, чтобы он не добавлялся заново каждый раз, когда вызывается обработчик событий btnBuildTree_Click.

...