Обновляемое сообщение загрузки при обработке на стороне сервера?

Часть моего сайта требует выполнения ряда серверных шагов, выполнение которых требует времени. Я видел несколько способов отображения сообщения о статической загрузке, но есть ли способ обновить сообщение во время обработки на стороне сервера? (например, "Выполнение шага один...", затем "Выполнение шага два..." и т. д.)

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

Я думаю, что смогу сделать это, разбив процедуру на отдельную процедуру для каждого шага, с обратными передачами для обновления сообщения, а затем запуском следующего шага после обновления сообщения, но я думаю, что это могло бы привести к ошибкам, если бы процесс был прервано (как пользователь закрывает страницу) до завершения всех шагов. Есть ли способ лучше?

Любая помощь будет принята с благодарностью.

0 ответов

Другие вопросы по тегам