Asp.net2.0里的SessionPageStatePersister
备注:
ASP.NET 页可在处理和提供任何网页所必需的原本无状态 HTTP 请求与响应之间存储 Page 状态信息。此状态称为“视图状态”。
ASP.NET 的默认持久性机制是使用 HiddenFieldPageStatePersister 类将视图状态存储在客户端。使用各个 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种页面属性:HiddenFieldPageState 、SessionPageStatePersister
前一种类似以前1.1里的viewstate行为,主要看后一种。
通过一个例子,可以更形象了解SessionPageStatePersister
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
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();
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title></head><body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="GridView1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Submit" /></div>
</form></body></html>
高亮部分注
释掉再次运行,比较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是不同的-----------------
Asp.net2.0里的SessionPageStatePersister的更多相关文章
- 在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table)
原文:在ASP.NET2.0里打印网页指定的内容(比如打印网页里的一个Table) 打印指定内容: <html> <head> <script type= " ...
- 【IHttpHandler】在ASP.Net2.0中使用UrlRewritingNet实现链接重写
很多时候我们需要链接转向(Url Rewriting),例如二级域名转向.文章访问链接等场合. 让我们看两个例子: 1 你现在看到的当前作者的博客园的域名: http://jx270.cnblogs. ...
- asp.net2.0安全性(2)--用户个性化设置(1)--转载来自车老师
在Membership表中可以存储一些用户的基本信息,但有的时候,我们需要记录的用户信息远远不止Membership表中提供的这些,如QQ.MSN.家庭住址.联系电话等等.那如何把这些用户信息记录到数 ...
- asp.net2.0安全性(2)--用户个性化设置(2)--转载来自车老师
上一篇我们用Profile.age等方式可以读取用户的年龄和其它的信息,但有的时候我们要查询显示所有用户的信息,但asp.net没有提供查询所有用户信息的功能,我们只能对现有的用户逐一查询其Profi ...
- asp.net2.0安全性(3)--验证与授权--转载来自车老师
"验证"与"授权"是对网页资源安全管理的两道门. 验证(Authentication):检查用户是否是合法的用户.就像是网站大门口的保卫,服责验证使用的用户名和 ...
- asp.net2.0安全性(1)--用户角色篇(类)--转载来自车老师
Membership.MembershipUser和Roles类 用户与角色管理在asp.net2.0中是通过Membership和Roles两个类来实现的. Membership:用户成员账号管理, ...
- asp.net2.0安全性(1)--用户角色篇(起篇)--转载来自车老师
安全管理的解决方案在.net1.1中几乎为一片空白,对于应用程序的验证与授权大部分的工作是开发人员自己编写代码,或者是借助企业库等工具来实现,此可谓.net1.1中的一大缺憾.在.net2.0中微软为 ...
- Asp.Net2.0下C#环境 Login控件实现用户登录
原文:Asp.Net2.0下C#环境 Login控件实现用户登录 一.前台显示效果 二.前台代码 <asp:Login ID="Login1" run ...
- ASP.NET2.0组件控件开发视频 初体验
原文:ASP.NET2.0组件控件开发视频 初体验 ASP.NET2.0组件控件开发视频 初体验 录了视频,质量不是很好,大家体验下.我会重新录制的 如果不清楚,可以看看http://v.youku. ...
随机推荐
- Codeforces Round #345 (Div. 2) B. Beautiful Paintings 暴力
B. Beautiful Paintings 题目连接: http://www.codeforces.com/contest/651/problem/B Description There are n ...
- Educational Codeforces Round 6 F. Xors on Segments 暴力
F. Xors on Segments 题目连接: http://www.codeforces.com/contest/620/problem/F Description You are given ...
- PHP温故知新(一)
前言 开发PHP也有几年的时间了,记得第一次接触PHP那时候还是PHP4,现在PHP版本已经是7了,虽然本人也算是一个PHP老手了,但是总觉得有些基础知识掌握的不是很好.学PHP之初只是为了混口饭吃, ...
- Ubuntu 16.04安装RedisDesktopManager
说明:0.9版本的安装补上,只能安装0.8版本的. 官网: https://github.com/uglide/RedisDesktopManager 下载: https://github.com/u ...
- jquery-qrcode 生成和读取二维码
首先要导入jar包(生成二维码的jar和读取二维码的jar) 生成二维码: package com.imooc.qrcode; import java.awt.Color; import java.a ...
- OpenCV支持向量机SVM对线性不可分数据的处理
支持向量机对线性不可分数据的处理 目标 本文档尝试解答如下问题: 在训练数据线性不可分时,如何定义此情形下支持向量机的最优化问题. 如何设置 CvSVMParams 中的参数来解决此类问题. 动机 为 ...
- (转)dubbo design
框架设计 整体设计 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口, 位于中轴线上的为双方都用到的接口. 图中从下至上分为十层,各层均为单向依赖,右边的黑 ...
- Helpers.parallel_bulk in Python not working?
Helpers.parallel_bulk in Python not working? 学习了:https://discuss.elastic.co/t/helpers-parallel-bulk- ...
- Springboot配置文件加载顺序
使用Springboot开发的时候遇到了配置的问题,外部config里的配置文件本来没有配置https怎么启动还是https呢,原来开发中测试https在classpath路径的配置文件添加https ...
- Win7如何开机直接进桌面
运行CONTROL USERPASSWORDS2 取消登陆要密码那项后再点应用,直接输入密码下次就能自己登陆进入桌面啦