Обновляемое сообщение загрузки при обработке на стороне сервера?
Часть моего сайта требует выполнения ряда серверных шагов, выполнение которых требует времени. Я видел несколько способов отображения сообщения о статической загрузке, но есть ли способ обновить сообщение во время обработки на стороне сервера? (например, "Выполнение шага один...", затем "Выполнение шага два..." и т. д.)
В качестве теста я попробовал один из примеров статических сообщений, найденных при поиске в Google:
// From test.aspx
<asp:UpdateProgress runat="server" ID="PageUpdateProgress">
<ProgressTemplate>
<asp:Literal runat="server" ID="progressMessage">Loading</asp:Literal>
</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel runat="server" ID="Panel">
<ContentTemplate>
<asp:Button runat="server" ID="UpdateButton" OnClick="UpdateButton_Click" Text="Update" />
</ContentTemplate>
</asp:UpdatePanel>
// From test.aspx.cs
protected void UpdateButton_Click(object sender, EventArgs e)
{
Literal lit = (Literal) PageUpdateProgress.FindControl("progressMessage");
if (lit != null) { lit.Text = "One"; }
System.Threading.Thread.Sleep(2000);
if (lit != null) { lit.Text = "Two"; }
System.Threading.Thread.Sleep(2000);
if (lit != null) { lit.Text = "Three"; }
System.Threading.Thread.Sleep(2000);
if (lit != null) { lit.Text = "Done."; }
}
... все это дало мне статическую "загрузку" до завершения процедуры. (На самом деле я этого и ожидал.)
Я также попытался изменить элемент управления UpdateProgress на UpdatePanel и изменил Literal на
<span id="spanID">Loading...</span>
, затем попробовал
Response.Write(@"<script>spanID.innerHTML='new message';</script>");
изнутри процедуры тестирования, но это тоже не сработало. Я думаю, это не удалось из-за того, как обрабатываются обратные передачи, но это мой первый сайт с ASP.NET, и я все еще изучаю основы (конечно, при попытке создать полнофункциональный сайт - всегда запускать, прежде чем вы сможете сканировать).
Я думаю, что смогу сделать это, разбив процедуру на отдельную процедуру для каждого шага, с обратными передачами для обновления сообщения, а затем запуском следующего шага после обновления сообщения, но я думаю, что это могло бы привести к ошибкам, если бы процесс был прервано (как пользователь закрывает страницу) до завершения всех шагов. Есть ли способ лучше?
Любая помощь будет принята с благодарностью.