我们知道当我们使用ASP.NET AJAX的一些方便的服务端控件如UpdatePanel,我们的浏览器不能保存这些异步浏览的页面状态,而ASP.NET3.5 Extensions给我们提供了一个解决方法,下面演示一下使用实例:
一:简单示例
1. 首先下载安装ASP.NET 3.5 Extensions
2.新建一个ASP.NET3.5 Extensions Web Application
3. 向页面拖动一个ASP.NET3.5 Extensions下的ScriptManger和UpdatePanel
4. 修改Default.aspx,注意黄色部分
EnableHistory默认是false,要设为true, EnablestateHash就是地址栏是否加密
5. 修改Default.aspx.cs
当我们需要保存信息时,添加一个历史点,保存供还原时使用的一些信息,然后当点击后退按钮时,会执行ScriptManager_Navigate来使用我们保存的信息。
6.效果
7.原理
我们看一下页面的源码,发现如果我们EnableHistory="true",会自动给我们页面添加一个Iframe,当我们后退,前进时这些还原点是更改Iframe.
二、分页示例:
1.修改页面Default.aspx如下:
2. 修改页面Default.aspx.cs如下:
我们添加一个List来提供数据源,完整代码如下:
using
System;
using
System.Collections;
using
System.Configuration;
using
System.Data;
using
System.Linq;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.HtmlControls;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Xml.Linq;
using
System.Collections.Generic;
//
Descirption: demo ajax history
//
Created by: Jack Wang
namespace
AjaxHistory
![](https://i-blog.csdnimg.cn/blog_migrate/c535988daa7e5f0eba4b5743aea46218.png)
{
public partial class _Default : System.Web.UI.Page
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
private static string historyTime = "historyTime";
private List<Student> students = new List<Student>();
protected void Page_Load(object sender, EventArgs e)
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
for (int i = 0; i < 20; i++)
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
students.Add(new Student
{ Name = "TestName" + i.ToString(), Address = "Street" + i.ToString(), age = i });
}
if (!Page.IsPostBack)
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
this.GetData();
}
}
protected void mGetTimeButton_Click(object sender, EventArgs e)
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
this.mResultTimeLabel.Text = DateTime.Now.ToString();
ScriptManager.GetCurrent(this).AddHistoryPoint(historyTime, this.mResultTimeLabel.Text, DateTime.Now.Second.ToString());
}
![](https://i-blog.csdnimg.cn/blog_migrate/f4d1b17877263a41a4bea7d8a8de23f0.png)
protected void ScriptManager1_Navigate(object sender, HistoryEventArgs e)
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
//restore time label
if (!String.IsNullOrEmpty(e.State[historyTime]))
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
this.mResultTimeLabel.Text = e.State[historyTime].ToString();
}
![](https://i-blog.csdnimg.cn/blog_migrate/f4d1b17877263a41a4bea7d8a8de23f0.png)
//restore gridview result
if (!string.IsNullOrEmpty(e.State["gridviewResult"]))
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
GridView1.PageIndex = Int32.Parse(e.State["gridviewResult"]);
this.GetData();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/f4d1b17877263a41a4bea7d8a8de23f0.png)
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
GridView1.PageIndex = e.NewPageIndex;
//just need save page index for history
ScriptManager.GetCurrent(this).AddHistoryPoint("gridviewResult", e.NewPageIndex.ToString(), "gridviewResult"+e.NewPageIndex.ToString());
this.GetData();
}
![](https://i-blog.csdnimg.cn/blog_migrate/f4d1b17877263a41a4bea7d8a8de23f0.png)
public void GetData()
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
GridView1.DataSource = students;
GridView1.DataBind();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/f4d1b17877263a41a4bea7d8a8de23f0.png)
public class Student
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
{
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
public string Name
{ get; set; }
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
public int age
{ get; set; }
![](https://i-blog.csdnimg.cn/blog_migrate/f1e4c4f93b9c2197157cceaaf7884df7.png)
public string Address
{ get; set; }
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/4cbff9492ef12df75360ae01850cabf0.png)
3.效果:
![image](https://i-blog.csdnimg.cn/blog_migrate/5966a6f672e280020e38e80e507440ae.png)
本文示例代码下载:http://www.cnblogs.com/Files/cnblogsfans/AjaxHistory.rar
我的这篇博客里写了使用ASP.NET 3.5 Extensions管理浏览器历史:使用客户端