一个web页面上有一个搜索框和一个搜索按钮,有6个GridView控件,输入一个关键字点击搜索后,页面会执行6次SQL数据库查询,因为每张表的结构和内容不同,6次查询完成可能需要1分钟左右,为了有更好的用户体验和防止页面超时,在查询期间页面上的6个GridView控件显示正在查询,然后依次填充结果,也就是说,那6次查询是依次进行的,每进行完毕一个就在页面上填充一个GridView控件,没有查询的就显示正在查询,在此期间页面是无刷新的状态。
UpdatePanel控件根本做不到,UpdatePanel 控件添加到页面上的效果是,后台的6次查询全部完成后才刷新页面,我要的效果是,查询完成一个,页面就显示一个查询结果。谁能帮帮忙?给点思路,最好有示例代码。我都不知道这些效果到底涉及到什么技术
UpdatePanel控件根本做不到,UpdatePanel 控件添加到页面上的效果是,后台的6次查询全部完成后才刷新页面,我要的效果是,查询完成一个,页面就显示一个查询结果。谁能帮帮忙?给点思路,最好有示例代码。我都不知道这些效果到底涉及到什么技术
照1楼说的,那岂不是要每个GridView控件都单独设置一个Button
<form id="form1" runat="server">
<div id="a1">
</div>
<div id="a1_1">
</div>
<br />
<div id="a2">
</div>
<div id="a2_1">
</div>
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script>
$.ajax({
type: "GET",
url: "Handler.ashx",
cache: false,
data: "key=1",
beforeSend: function(){ $("#a1_1").html("载入"); },
success: function (msg) {
$("#a1_1").html("");
$("#a1").html(msg);
}
});
$.ajax({
type: "GET",
url: "Handler2.ashx",
cache: false,
data: "key=1",
beforeSend: function () { $("#a2_1").html("载入"); },
success: function (msg) {
$("#a2_1").html("");
$("#a2").html(msg);
}
});
</script>
</form>
Handler.ashx
<%@ WebHandler Language="C#" Class="Handler" %>using System;
using System.Web;public class Handler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
System.Threading.Thread.Sleep(5000);
context.Response.Write("Hello World");
}
public bool IsReusable {
get {
return false;
}
}}
Handler2.ashx<%@ WebHandler Language="C#" Class="Handler2" %>using System;
using System.Web;public class Handler2 : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
System.Threading.Thread.Sleep(1000);
context.Response.Write("Hello World");
}
public bool IsReusable {
get {
return false;
}
}}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server"> protected void Timer1_Tick(object sender, EventArgs e)
{
UpdatePanel1.Update();
this.Image1.Visible = true;
if (DateTime.Now.Ticks % 2 == 0)
this.Image1.ImageUrl = "http://avatar.profile.csdn.net/1/8/D/2_sp1234.jpg";
else
this.Image1.ImageUrl = "http://imgsrc.soso.com/imgget.q?id=e422d6d9a9c9b462a61b5e9d37105d87";
} protected void Timer2_Tick(object sender, EventArgs e)
{
UpdatePanel2.Update();
this.Calendar1.SelectedDate = new DateTime(2010, 10, 1);
this.Calendar1.Visible = true;
Timer2.Enabled = false;
} protected void Timer3_Tick(object sender, EventArgs e)
{
UpdatePanel3.Update();
Timer3.Enabled = false;
var dic = this.Request.ServerVariables;
GridView1.DataSource = (from k in dic.AllKeys
select new { Name = k, Value = dic[k] }).ToList();
GridView1.DataBind();
GridView1.Visible = true;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>异步加载页面上的html片段</title>
</head>
<body style="margin: 0; padding: 0; overflow: auto">
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
这里有一些异步加载的内容,它们的刷新频率各不相同!
<br />
<br />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="Timer1" runat="server" Interval="5000" OnTick="Timer1_Tick" />
<asp:Image ID="Image1" runat="server" ImageUrl="http://imgsrc.soso.com/imgget.q?id=e422d6d9a9c9b462a61b5e9d37105d87"
Visible="false" />
</ContentTemplate>
</asp:UpdatePanel>
<hr />
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="Timer2" runat="server" Interval="500" OnTick="Timer2_Tick" />
<asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
</ContentTemplate>
</asp:UpdatePanel>
</td>
<td rowspan="2">
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Timer ID="Timer3" runat="server" Interval="2000" OnTick="Timer3_Tick" />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="true" Visible="false" />
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</table>
</form>
</body>
</html>
你自己想想看,谁说点击Button就应该开始查询?这是你自己的钻进牛角尖里了。既然你要异步查询显示,那么点击Button就意味着开始部署查询,也就是开始Timer.Enable=true从而让6个UpdatePanel开始各自分别并行运行,这才是Button的任务。其实用大白话就能做好软件设计。关键是说好大白话,说太多的技术术语会因为玩名词概念而钻入牛角尖里,反而不利于软件设计。
{
UpdatePanel3.Update();
if (DateTime.Now.Ticks % 2 == 0)
{
var dic = this.Request.ServerVariables;
GridView1.DataSource = (from k in dic.AllKeys
select new { Name = k, Value = dic[k] }).ToList();
}
else
{
var dic = this.Request.Cookies;
GridView1.DataSource = (from k in dic.AllKeys
select new { Name = k, Value = dic[k].Value }).ToList();
}
GridView1.DataBind();
GridView1.Visible = true;
}