Обновление метки ASP.NET во время обработки - PullRequest
0 голосов
/ 10 февраля 2009

У меня есть метод, который запускается по нажатию кнопки, с 4 метками. Что мне нужно сделать, это обновить метку после выполнения каждого блока кода. Я пробовал создавать потоки, обновлять панели и т. Д. И, похоже, ничего не получалось. Я думал, что таймер сработает, но он срабатывает только тогда, когда вы не находитесь внутри метода. Код выглядит примерно так:

private void SomeMethod()
{
     label1.text = "Processing...";
     AnotherMethod();
     label1.text = "Done.";
     label2.text = "Processing...";
     AnotherAnotherMethod();
     label2.text = "Done.";

     //etc...
}

Ответы [ 2 ]

5 голосов
/ 10 февраля 2009

Вы неправильно понимаете, как работает asp.net. Код вашего сервера запускается в ответ на запрос браузера на complete html-страницу. Это верно даже тогда, когда все, что вы действительно хотите сделать, это запустить некоторый код нажатия кнопки. вся страница должна быть перестроена с нуля, даже на обратной передаче. Это просто способ веб-форм.

Как только страница отображается в браузере, этот экземпляр класса вашей страницы будет уничтожен . При следующей обратной передаче вы снова начнете с нуля, с заметными исключениями сеанса, состояния просмотра и кэша приложения. Даже предыдущий экземпляр DOM страницы в браузере заменен.

Поэтому, когда вы устанавливаете свойство text метки, вы ничего не обновляете визуально в браузере. Все, что вы делаете, это обновляете некоторое временное хранилище в вашем классе страниц. На последнем этапе выполнения кода вашего сервера все эти временные переменные используются для визуализации заполненного HTML-кода, и ответ в конце концов отправляется в браузер и показывается пользователю.

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

Теперь ajax может немного усложнить ситуацию. При использовании элемента управления ajax вы, возможно, больше не обновляете всю страницу, но концепция по-прежнему применима: один запрос сделан, один ответ получен и используется для обновления всего контекста запроса. Вы можете еще больше запутать вещи, если у вас есть много javascript для обработки результата запроса ajax.

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

1 голос
/ 10 февраля 2009

Можете ли вы представить 3 метода клиентскому скрипту и затем вызывать их последовательно из кода на стороне клиента, когда метод1 завершит работу, клиентский скрипт обновит пользовательский интерфейс, затем вызовет method2, и так далее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...