使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

我们知道当我们使用ASP.NET AJAX的一些方便的服务端控件如UpdatePanel,我们的浏览器不能保存这些异步浏览的页面状态,而ASP.NET3.5 Extensions给我们提供了一个解决方法,下面演示一下使用实例:

一:简单示例

1. 首先下载安装ASP.NET 3.5 Extensions

2.新建一个ASP.NET3.5 Extensions Web Application

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

3. 向页面拖动一个ASP.NET3.5 Extensions下的ScriptManger和UpdatePanel

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

4. 修改Default.aspx,注意黄色部分

EnableHistory默认是false,要设为true, EnablestateHash就是地址栏是否加密

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

5. 修改Default.aspx.cs

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

当我们需要保存信息时,添加一个历史点,保存供还原时使用的一些信息,然后当点击后退按钮时,会执行ScriptManager_Navigate来使用我们保存的信息。

6.效果

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端 使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

7.原理

我们看一下页面的源码,发现如果我们EnableHistory="true",会自动给我们页面添加一个Iframe,当我们后退,前进时这些还原点是更改Iframe.

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

二、分页示例:

1.修改页面Default.aspx如下:

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

2. 修改页面Default.aspx.cs如下:

我们添加一个List来提供数据源,完整代码如下:

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端using System;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Collections;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Configuration;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Data;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Linq;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Web;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Web.Security;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Web.UI;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Web.UI.HtmlControls;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Web.UI.WebControls;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Web.UI.WebControls.WebParts;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Xml.Linq;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
using System.Collections.Generic;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
//Descirption: demo ajax history
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
//Created by: Jack Wang 
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
namespace AjaxHistory
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端    
public partial class _Default : System.Web.UI.Page
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端    
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
private static string historyTime = "historyTime";
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
private  List<Student> students = new List<Student>();
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
protected void Page_Load(object sender, EventArgs e)
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
for (int i = 0; i < 20; i++)
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端                students.Add(
new Student { Name = "TestName" + i.ToString(), Address = "Street" + i.ToString(), age = i });
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            }

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
if (!Page.IsPostBack)
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端                
this.GetData();
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            }

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        }

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
protected void mGetTimeButton_Click(object sender, EventArgs e)
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
this.mResultTimeLabel.Text = DateTime.Now.ToString();
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            ScriptManager.GetCurrent(
this).AddHistoryPoint(historyTime, this.mResultTimeLabel.Text, DateTime.Now.Second.ToString());
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        }
 
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
protected void ScriptManager1_Navigate(object sender, HistoryEventArgs e)
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
//restore time label
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
            if (!String.IsNullOrEmpty(e.State[historyTime]))
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端                
this.mResultTimeLabel.Text = e.State[historyTime].ToString();
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            }
 
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
//restore gridview result
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
            if (!string.IsNullOrEmpty(e.State["gridviewResult"]))
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端                GridView1.PageIndex 
= Int32.Parse(e.State["gridviewResult"]);
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端                
this.GetData();
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            }

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        }
 
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            GridView1.PageIndex 
= e.NewPageIndex;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
//just need save page index for history
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
            ScriptManager.GetCurrent(this).AddHistoryPoint("gridviewResult", e.NewPageIndex.ToString(), "gridviewResult"+e.NewPageIndex.ToString());
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            
this.GetData();
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        }
 
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
public void GetData()
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            GridView1.DataSource 
= students;
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端            GridView1.DataBind();
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        }

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端    }
 
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端    
public class Student
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端    
{
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
public string Name getset; }
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
public int age getset; }
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端        
public string Address getset; }
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端    }

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端}
 
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端
使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

 

3.效果:

使用ASP.NET 3.5 Extensions管理浏览器历史:使用服务器端

本文示例代码下载:http://files.cnblogs.com/cnblogsfans/AjaxHistory.rar

我的这篇博客里写了使用ASP.NET 3.5 Extensions管理浏览器历史:使用客户端

本文转自敏捷的水博客园博客,原文链接http://www.cnblogs.com/cnblogsfans/archive/2008/04/08/1142182.html如需转载请自行联系原作者


王德水

上一篇:自定义QGraphicsItem选中样式


下一篇:ASP.NET MVC分页的实现(上)