div.Visible在其他代码之前不执行

时间:2013-01-28 00:03:46

标签: c# asp.net

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

为了在一个页面上实现这一点,我有一个名为loadingdiv的div,我在Visible期间将false属性设置为PageLoad。当我按下“查找电影”按钮时,c#代码应该隐藏最初在页面上的内容,在后端加载Web服务信息时显示加载图像,然后隐藏加载图像并调出数据显示div。

如果我注释掉从webservices加载数据的类,这可以正常工作。但是,只要我添加了我的网络服务信息,它就会完全跳过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

1 个答案:

答案 0 :(得分: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/

相关问题