博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.net2.0里的SessionPageStatePersister
阅读量:7282 次
发布时间:2019-06-30

本文共 1782 字,大约阅读时间需要 5 分钟。

备注:

ASP.NET 页可在处理和提供任何网页所必需的原本无状态 HTTP 请求与响应之间存储 状态信息。此状态称为“视图状态”。

ASP.NET 的默认持久性机制是使用 类将视图状态存储在客户端。使用各个 HTTP 请求和响应来存储视图状态和数据在大体上来说效果良好,而且在大型 Web 场方案中非常重要,因为由哪台 Web 服务器来处理该请求并不重要:当前上下文中提供了页状态,因此服务器可以准确地呈现该页。

在将页提供给客户端资源有限或所用标记语言不支持隐藏字段元素的小型设备时,需要将视图状态存储在服务器上。一些 ASP.NET 设备页适配器重写 GetStatePersister 方法以返回一个 SessionPageStatePersister 对象,该对象将页状态存储在服务器上与客户端关联的会话对象中。

Asp.net1.1里的Viewstate,我们可以看作是在页面加入一个隐藏域,将页面状态进行保存,所以我们在html源码里常见到如下类似代码:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPaA8FDzhjNzkyNTMzNjE1YWEyNxgBBQlHcmlkVmlldzEPZ2QZw
44JLJFcglwRl9TiNliE82yAuQ==" />
如果我们想将其状态保存到session里,必须手动操作;Asp.net2.0里就简单了。

Asp.net2.0里用来维护页面状态的2种页面属性:HiddenFieldPageStateSessionPageStatePersister

前一种类似以前1.1里的viewstate行为,主要看后一种。

通过一个例子,可以更形象了解SessionPageStatePersister

 
protected override PageStatePersister PageStatePersister { get { return new SessionPageStatePersister(this); } }
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
if (!IsPostBack) {
ArrayList list = new ArrayList();
for (int i = 0; i < 1000; i++)
{
list.Add(Convert.ToString(i));
}
GridView1.DataSource = list;
GridView1.DataBind();
}
}
 
 
 
Untitled Page
 

高亮部分注

释掉再次运行,比较html源码可以看到页面状态真的保存到session里去了(不注释掉时)。

使用方法1:我们可以构造一个basepage,需要的话,后续页面继承自basepage

public class PagePersisterBasePage : Page
{
    public PagePersisterBasePage()   {
    }
    protected override PageStatePersister PageStatePersister {
        get {
            return new SessionPageStatePersister(this);
        }
    }
}
===================
<%@ Page Language="C#"  Inherits="PagePersisterBasePage" %>

使用方法2:在web.config里设置
<?xml version="1.0"?>
<configuration>
   <system.web>
    <pages pageBaseType="PagePersisterBasePage" />
   </system.web>
</configuration>
-----------------注意这时“影响范围”与方法1是不同的-----------------

转载于:https://www.cnblogs.com/sandea/p/3289892.html

你可能感兴趣的文章
进程和线程关系与区别
查看>>
树链剖分总结
查看>>
Ubuntu 在Update以后任然出现找不到安装包问题解决方案
查看>>
QTableView
查看>>
制作win10 usb 启动盘
查看>>
log4net使用简介
查看>>
Angular 4.0从入门到实战
查看>>
性能测试--siege
查看>>
DNS原理和CentOS7上bind域名服务器配置详解
查看>>
从键盘输入一个班5个学生的分数,求和并输出
查看>>
HomeBrew的安装详细步骤
查看>>
js如何判断一个值是不是Array类型
查看>>
R的grep和grepl
查看>>
Linux mkdir
查看>>
Spark Pipeline
查看>>
Spark FPGrowth (Frequent Pattern Mining)
查看>>
二维vector基本使用
查看>>
节省微博互粉时间,使用全自动"一键关注"Chrome扩展程序
查看>>
iOS Getter 和Setter 注册xibcell
查看>>
安装Python的numpy库
查看>>