是的,您可以这样做。但完全不清楚为什么这些查询需要很长时间?应该查看和优化它们。
请记住,您的代码永远不会与用户交互。该页面传输到 Web 服务器。后台代码运行并可以修改页面上的任何内容 - 当所有后台代码完成后,整个新页面将返回客户端浏览器。然后加载、刷新并显示。
那么,这意味着什么?你会说在页面上放一个按钮(我们可以隐藏它),但是为了测试让页面加载 - 但不要运行你的慢数据查询。
现在,当我们点击按钮时,我们可以让客户端浏览器代码显示动画,然后运行按钮背后的代码。完成后,页面将再次返回客户端。
因此,我们需要(必须)首先将整个页面加载到客户端浏览器。然后点击一个按钮。现在我们可以让用户点击那个按钮,或者我们可以让浏览器代码点击那个按钮。一旦我们得到这个工作,然后我们只需隐藏按钮。
所以,这意味着您必须将页面加载代码移到一个简单的 asp.net 按钮后面。让该代码工作。你现在可以说这样做:
这也意味着默认情况下,我们让页面显示微调器。我们的按钮后面的代码会将其关闭!!!
所以,我们可以有这个标记(我假设 jQquery - 我们不都是吗???)。
所以,这个标记:
<div id="MySpinner" runat="server">
<img src="Content/wait2.gif" />
</div>
<asp:Button ID="cmdLoadGrid" runat="server" Text="Button" ClientIDMode="Static" Style="display:none" />
<div id="MyGrid" runat="server">
<asp:GridView ID="GridView1" runat="server" CssClass="table"></asp:GridView>
</div>
<script>
var isPostBack = <%=Convert.ToString(Page.IsPostBack).ToLower()%>;
$(document).ready(function () {
if (isPostBack == false) {
$('#cmdLoadGrid').click()
}
})
</script>
所以,微调器 gif 清晰可见。页面加载 - 显示微调器,然后我们使用 JavaScript 单击按钮来加载网格。
我们的代码如下所示:
Protected Sub cmdLoadGrid_Click(sender As Object, e As EventArgs) Handles cmdLoadGrid.Click
Thread.Sleep(4000) ' for testing = remove
Dim strSQL As String = "SELECT ID, FirstName, LastName, HotelName, City from tblHotels"
Using conn As New SqlConnection(My.Settings.TEST4)
Using cmdSQL As New SqlCommand(strSQL, conn)
conn.Open()
GridView1.DataSource = cmdSQL.ExecuteReader
GridView1.DataBind()
End Using
End Using
' hide the spinner
MySpinner.Style("Display") = "none"
MyGrid.Style("Display") = "normal"
End Sub
所以,请注意我们如何将微调器放置在“div” - 服务器标记中,以便我们后面的简单代码可以运行 - 加载网格,然后显示网格,隐藏微调器。
所以,连接按钮 - 让它工作。然后用 display:none 隐藏它。我们还添加了一个自定义 js 函数来获取 isPostBack - 因为 JavaScript 没有该特性/功能。
但是,我会仔细研究一下为什么您的这些查询需要这么长时间 - 他们可能不应该这样做。