|
经常有朋友问到怎么无刷新页面,适时显示数据库中的变化,或是说数据库中更新后,所有打开此页面的用户都可以看到结果,而不用主动去刷新页面(当然页面还是自己在刷新,不然怎么能从服务器端取回数据呢。)
自从 微软推出 了自己的 AJAX组件 后,在AJAX 组件 和 asp.net2.0 下问题的解决就变得很简单了,下面我说说怎么使用MS AJAX组件实现无需要用户刷就能让数据的适时显示。本文后附代码和源程序。觉得不好的朋友,请不要骂我:)
步骤:一、下载和安装 MS AJAX 组件 (已经安装的朋友可跳过此步,但要注意版本。)下载地址以及相关的AJAX的使用和其他请访问微软的AJAX网站:http://ajax.asp.net/
二、建立一个AJAX 站点。 经过第一步后,在新建站点的对话框中就可以看到一个支持AJAX的站点模板,从模板进行创建就行了。
三、 在页面上放一个 UpdatePanel 组件, 用此组件包住要更新的数据显示控件。在这里我们为了能看到效果 加了一个 label 显示服务器时间。
四、把 ScriptManager 的属性设为: EnablePartialRendering=true 注意有些怎么本的AJAX中可能默认就是true 但有些老的版本中 默认为false, 这个属性就是设置是局部刷新还是全部刷新。
五、 到这里,页面上的数据显示已经可以无刷新了,但是要适时我们还要再使用 Timer控件 (别到处乱找了,也是在装了AJAX后才会在工具箱中出现的,和上面的控件在一起。)
把timer的触发时间设为 1000 .也就是1秒,当然你也可以高大点或是小点都行。
为了能在label中适时的显示服务器时间 ,可以在 Timer1_Tick方法中使用以下代码。
protected void Timer1_Tick(object sender, EventArgs e) { this.Label1.Text = DateTime.Now.ToString(); }
这样这个例子就完成了,运行看看吧。时间是否在变,在其他页面添加一条数据看看,是不是这个页面不主动去刷新也可以看到了。
附件中的程序:运行环境: VS2005 + MS AJAX 1.0
效果如下:

一点废话:
这本来是自己当初做的一个小例子,由于CSDN上的朋友经常有人来邮 索要代码,而部份人要到的代码由于环境的原因 无法正常使用。起初的一些邮件我都给预了回复,但后来由于时间长了,有些邮件没有及时回复,为了一次性解决这个问题,我做例子重做了一个简单的,加上截图和说明,以方面大家使用。
本例使用MS AJAX 组件实现无刷新适时显示数据库中的数据变化。 为了让大家能看清楚,所以选了一个简单的例子。 显示 时只有一个 GridView 和一个 Label 分别用来显示数据 和 时间。显示时间是为了让大家看到页面在局部更新。
如果这时你改了数据库中的数据,你会发现页面上的数据也马上更新了。
本例使用了 微软的 AJAX 组件。如果大家想看到运行的效果 ,可以下载本文所带的附件 ,但你要先安装 该组件。
该组件的下载及 其相关 可访问 微软的asp.net官方网站 的 http://AJAX.asp.net 下载。 为了方便大家,本文附件包中附带该组件。使用前请先查毒,不放心请勿请用。
附代码:
//页面
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering=true runat="server" /> <div> <asp:UpdatePanel ID="UpdatePanel1" runat="server"> <ContentTemplate> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CategoryID" DataSourceID="SqlDataSource1"> <Columns> <asp:BoundField DataField="CategoryID" HeaderText="CategoryID" InsertVisible="False" ReadOnly="True" SortExpression="CategoryID" /> <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" /> <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> </Columns> </asp:GridView> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <asp:Timer ID="Timer1" runat="server" Interval="1000" OnTick="Timer1_Tick"> </asp:Timer> <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT [CategoryID], [CategoryName], [Description], [Picture] FROM [Categories]"> </asp:SqlDataSource> </ContentTemplate> </asp:UpdatePanel> </div> </form> </body> </html>
// CS
using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) {
} protected void Timer1_Tick(object sender, EventArgs e) { this.Label1.Text = DateTime.Now.ToString(); } }
|