页面无限跳转间如何保存页面状态(2)

页面

解决方法的实现
以上分析过了之后,我们来看如何实现他:
class DataInfo:这个类用于保存数据状态,一般而言,也就是每个DataGrid对应一个:
[Serializable()]
public class DataInfo
{
private string dataName;
private Hashtable searchParams;
private Hashtable otherParams;
private int currentPage;
private string sortExpression;
private string itemID;

public DataInfo(string dataName)
{
this.dataName = dataName;
}

/// <summary>
/// 数据名
/// </summary>
public string DataName
{
get { return dataName; }
}
/// <summary>
/// 查询参数
/// </summary>
public Hashtable SearchParams
{
get { return searchParams; }
set { searchParams = value; }
}

/// <summary>
/// 获取其他参数
/// </summary>
public Hashtable OtherParams
{
get { return otherParams; }
set { otherParams = value; }
}

/// <summary>
/// 获取当前页
/// </summary>
public int CurrentPage
{
get { return currentPage; }
set { currentPage = value; }
}

/// <summary>
///获取排序方式
/// </summary>
public string SortExpression
{
get { return sortExpression ;}
set { sortExpression = value; }
}

/// <summary>
/// 获取要显示在当前页的项的ID
/// </summary>
public string ItemID
{
get { return itemID; }
set { itemID = value; }
}
}

class DataInfoList:这个类包装承载DataInfo的动态数组,限定数组输入输出的数据类型
[Serializable()]
public class DataInfoList
{
private ArrayList dataInfoList = new ArrayList();

public DataInfo this[int index]
{
get
{
return (DataInfo)dataInfoList[index];
}
set
{
if (((DataInfo)dataInfoList[index]).DataName == value.DataName || this[value.DataName] == null)
{
dataInfoList[index] = value;
}
else
{
throw new Exception("There have a DataInfo used this Name yet!");
}
}
}

public DataInfo this[string dataName]
{
get
{
for (int i = 0; i < dataInfoList.Count; i++)
{
if (this[i].DataName == dataName)
{
return this[i];
}
}
return null;
}
set
{
for (int i = 0; i < dataInfoList.Count; i++)
{
if (this[i].DataName == dataName)
{
this[i] = value;
return;
}
}
this.Add(value);
}
}

public void Remove(DataInfo value)
{
dataInfoList.Remove(value);
}

public void Remove(string dataName)
{
DataInfo dataInfo = this[dataName];
if (dataInfo != null)
{
dataInfoList.Remove(dataInfo);
}
}

public bool Contains(DataInfo value)
{
return dataInfoList.Contains(value);
}

public bool Contains(string dataName)
{
DataInfo datainfo = this[dataName];
if (datainfo != null)
{
return true;
}
return false;
}

public void Clear()
{
dataInfoList.Clear();
}

public int Add(DataInfo value)
{
if (this[value.DataName] == null)
{
return dataInfoList.Add(value);
}
else
{
throw new Exception("There have a DataInfo used this Name yet!");
}
}

public int Count
{
get
{
return dataInfoList.Count;
}
}
}

interface IPageInfo:这个接口用在页面中,以实现页面间的数据通信。
public interface IPageInfo
{
/// <summary>
/// 页面名
/// </summary>
string PageName
{
get;
}
/// <summary>
/// 获取数据信息
/// </summary>
DataInfoList DataInfos
{
get;
}

/// <summary>
/// 获取其他参数
/// </summary>
Hashtable OtherParams
{
get;
}
}

(未完待续)

时间: 2024-11-01 12:28:05

页面无限跳转间如何保存页面状态(2)的相关文章

页面无限跳转间如何保存页面状态(1)

页面 引子 这是一个极其困难的题目,仅仅是描述一遍,都会非常困难,不过我尝试一下,希望能描述清楚: 我们公司是采用list/Detail的页面逻辑,即list页面有一个DataGrid,列出了一些项,点击其中一项后,页面跳转到Detail页面查看该项的详细.Detail页面有一个返回按钮,点击后即返回到list页面.list中的数据列表通常是经过筛选的,如xxx大于20的,然后还经过了排序的. 现在问题是这样的: 用户要求,当从Detail返回到list中时,数据列表中的状态不变. 公司认为,这

页面无限跳转间如何保存页面状态 (3)

页面 在页面上的使用,定义好了以上这些之后,在页面中该怎样用呢?首先,在List页面中实现IPageInfo接口: public class RoleList : System.Web.UI.Page,IPageInfo然后针对每一个DataGrid实例化一个DataInfo对象:protected DataInfo dataInfo = new DataInfo("Role");接着写一些处理DataGrid状态的代码,我是使用的属性:#region 数据网格状态信息 private

页面跳转间如何保存页面查询状态

问题描述 我们公司是采用list/Detail的页面逻辑,即list页面有一个DataGrid,列出了一些项,点击其中一项后,页面跳转到Detail页面查看该项的详细.Detail页面有一个返回按钮,点击后即返回到list页面.list中的数据列表通常是经过筛选的,如xxx大于20的,然后还经过了排序的.现在问题是这样的:用户要求,当从Detail返回到list中时,数据列表中的状态不变.公司认为,这是一个合理的要求,因为数据量实在太大,谁都不想返回list就又得从第一页看起.还要求,刚才看的D

webkit中页面不能跳转-c#程序webkit页面不能跳转

问题描述 c#程序webkit页面不能跳转 winform中添加webkitbrowser,passport.baidu.com页面登录不能跳转,显示登录超时如何解决??急急急 解决方案 目前采用chromewebbrowser支持,感谢各位大牛的技术支持 解决方案二: fiddler调试下,点了登录发送请求到服务器了没有 解决方案三: 是不是webkit版本太旧有些新标准不支持了呢?其实我觉得用chromium比用webkit更好

利用response对象的sendRedirect方法跳转到下一页面,能保存什么范围的属性?

问题描述 利用response对象的sendRedirect方法跳转到下一页面,能保存什么范围的属性? 利用response对象的sendRedirect方法跳转到下一页面,能保存什么范围的属性?本人新手,知识面还是很多,请大神们帮我解答一下! 解决方案 response.sendRedirect是通过浏览器来做转向的. 假设在A.jsp页面设置request.setAttribute(""username""admin""); 那么在 requ

C#页面之间跳转功能的小结_C#教程

引言   ASP.NET提供了卓越的事件驱动编程模型,让开发者简化了应用程序的总体设计,但是这个也造成了它固有的一些问题,例如,使用传统的ASP里,我们可以通过使用POST方法很容易地实现页面间传递值,同样的事情,在使用事件驱动编程模型的ASP.NET就不是那么容易了,当然了,我们仍然有一些方法可以实现同样的功能.本文将试着使用不同的可能的方法来解决这个问题,但可以预见是,本文将包含使用querystring,session变量以及server.Transfer方法来实现页面间的值传递. 使用Q

Jsp中如何添加超链接跳转至另一个页面?

问题描述 跪求大神指导啊....急用,谢谢! 解决方案 解决方案二:<a>标签??解决方案三:问题太宽泛了.另一个页面是html页面,还是jsp页面呢?页面在WEB-INF里面,还是外面呢?这个都要分情况讨论的.如果是html页面且在WEB-INF外面,可以直接跳转如果在WEB-INF里面的页面,就必须通过servlet去跳转了.解决方案四:主要看你想实现什么样子的打开如果是新建页面跳转:window.open(url);url可以配成新页面的路径,也可以是要访问的action,再通过acti

Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】

应用情形:在web项目中,经常会遇到用户未登录或SESSION失效时用户发出非法的权限操作,如新闻的评论.文件的下载等等,在此我们可以使用struts拦截器对该用户发出的请求进行拦截,拦截后判断用户是否登录或SESSION是否有效,然后进行其正常操作.具体实例如下: 新建一个拦截器类UserInterceptor ,UserInterceptor.java代码如下 [java] view plaincopyprint? package com.hsinghsu.test.interceptor;

js不能跳转到上一页面的问题解决方法_javascript技巧

问题描述:我们有两个页面A和B,当我们从A跳到B后不做作任何让页面回传的操作,用JS:history.go(-1)就可以回到A页面,但是比如我们有Click,Change事件等激发了页面的回传,此时用history.go(-1)就回不到A页面了. 解决的方法:我们要想办法记录到页面回传的次数N,然后用history.go(-n),就可以回到A页面. 在B页面中放一个控件记录其回传的次数,初始值为1 复制代码 代码如下:   <%@ Page Language="C#" AutoE