2

我正在使用 c# 在 asp.net 中制作一个 Web 应用程序,它一次从 http Web 服务收集大量信息。由于这个数据收集过程需要 10-20 秒,我想用一个小的旋转图像显示一个小的加载框架。

为了在一个页面上实现这一点,我调用loadingdiv了一个 div,我将其Visible属性设置为falseduring PageLoad。当我的“查找电影”按钮被按下时,c#代码应该隐藏页面上的内容,在后端加载web服务信息时显示加载图像,然后隐藏加载图像并显示数据显示分区。

如果我注释掉从 web 服务加载数据的类,这工作正常。但是一旦我添加了我的网络服务信息,它就会完全跳过这loadingdiv.Visible = true条线,只进行 10-20 秒的操作。

这是相关的代码行。

 protected void btnFindMovies_Click(object sender, EventArgs e)
 {
    //Hides the main content that contained search options for movies
    thisarticle.Visible = false;
    articlediv.Visible = false;
    lblGenres.Visible = false;
    ratingdiv.Visible = false;
    List<int> gList = new List<int>(); //Genre List

    /* Other code that goes through checkboxes to find out which genres 
    to search for in the movie search */

    string title = "Movie Title Here"; 
    Page.Title = title;

    loadingdiv.Visible = true; //Shows loading div before completing search

    MovieSearch search = new MovieSearch(gList);  //Intensive web service use 
    (10-20 seconds)
    loadingdiv.Visible = false; //removes the loading div from the screen
}

loadingdiv当我的 Web 服务操作正在进行时,我如何才能显示?

4

1 回答 1

3

该方法中的所有内容都发生在向用户提供任何响应之前。这意味着会发生以下情况:

  • 用户单击您的按钮。
  • 请求被发送到服务器并发生回发。
  • 在回发期间,btnFindMovies_Click被解雇。你设置好Visible = true,等待网络服务返回自己的信息再设置Visible = false
  • 响应提供给浏览器。

因为这都是在同一个请求上完成的,所以在所有这些完成之前不会向浏览器返回任何内容,这有效地loadingdiv.Visible = true;完全消除了该行。

如果您希望在某些服务器端代码向 Web 服务发出请求时显示加载 div,则必须使用 AJAX 异步进行这些调用,并使用 Javascript 相应地隐藏/显示加载 div。

下面看起来像是一个有用的 AJAX 介绍指南:

http://www.simple-talk.com/dotnet/asp.net/ajax-basics-with-jquery-in-asp.net/

于 2013-01-28T00:13:13.510 回答