asp.net 处理原文件中过长的viewstate代码_实用技巧

复制代码 代码如下:

public class XVPage : Page
{
static private DirectoryInfo _Dir;
private DirectoryInfo Dir
{
get
{
if (_Dir == null)
{
_Dir = new DirectoryInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));
if (!_Dir.Exists)
_Dir.Create();
_Dir = new DirectoryInfo(Path.Combine(_Dir.FullName, "ViewState"));
if (!_Dir.Exists)
_Dir.Create();
}
return _Dir;
}
}
protected override object LoadPageStateFromPersistenceMedium()
{
PageStatePersister ps = this.PageStatePersister;
ps.Load();
if (ps.ControlState != null)
ps.ControlState = AntiSerialization((string)ps.ControlState);
if (ps.ViewState != null)
ps.ViewState = AntiSerialization((string)ps.ViewState);
return new Pair(ps.ControlState, ps.ViewState);
}
protected override void SavePageStateToPersistenceMedium(object state)
{
PageStatePersister ps = this.PageStatePersister;
if (state is Pair)
{
Pair pair = (Pair)state;
ps.ControlState = pair.First;
ps.ViewState = pair.Second;
}
else
{
ps.ViewState = state;
}
if (ps.ControlState != null)
ps.ControlState = AntiSerialization(ps.ControlState);
if (ps.ViewState != null)
ps.ViewState = AntiSerialization(ps.ViewState);
ps.Save();
}
private object AntiSerialization(string stateID)
{
string stateStr = (string)Cache[stateID];
string file = Path.Combine(Dir.FullName, stateID);
if (stateStr == null)
stateStr = File.ReadAllText(file);
else
Cache.Remove(stateID);
return new ObjectStateFormatter().Deserialize(stateStr);
}
private string AntiSerialization(object obj)
{
string value = new ObjectStateFormatter().Serialize(obj);
string stateID = (DateTime.Now.Ticks + (long)value.GetHashCode()).ToString(); //产生离散的id号码
File.WriteAllText(Path.Combine(Dir.FullName, stateID), value);
Cache.Insert(stateID, value);
return stateID;
}
protected override void OnUnload(EventArgs e)
{
base.OnUnload(e);
DateTime dt = DateTime.Now.AddMinutes(-20);
foreach (FileInfo fl in Dir.GetFiles())
if (fl.LastAccessTime < dt)
try
{
fl.Delete();
}
catch
{
}
}
}

只需要在页面后台中继承XVPage 就可以了
public partial class Index_Content : XVPage

时间: 2024-09-17 17:00:34

asp.net 处理原文件中过长的viewstate代码_实用技巧的相关文章

在.ashx文件中获取cookies值实现代码_实用技巧

创建 复制代码 代码如下: HttpCookie cookies = new HttpCookie("validate"); cookies["validate"] = validateNum; Response.AppendCookie(cookies); 获取 复制代码 代码如下: if (context.Request.Cookies["validate"] != null) { validate = context.Request.Coo

ASP.net中网站访问量统计方法代码_实用技巧

一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间(IP_DateTime),些表的信息本人只保存一天的信息,如果要统计每个月的信息则要保存一个月.因为我不太懂对数据日志的操作,所以创建此表,所以说我笨吧,哈哈. 二.在Global.asax中获取用户信息 在Global.asax的Session_Start即新会话启用时获取有关的信息,同时在这里实现在线人数.访问总人数的增量统计,代

asp.net实现在XmlTextWriter中写入一个CDATA的方法_实用技巧

本文实例讲述了asp.net实现在XmlTextWriter中写入一个CDATA的方法.分享给大家供大家参考,具体如下: 在CDATA可以用来写出像<br> ,<SCRIPT>这个样的HTML标记或任何其他标记.您不能添加一个简单的写WriteElementString这些标签的功能.将字符<转换成>.下面的例子给出了使用WriteElementString来写入一个cdata区域. 首先添加引用 using System.Xml 程序中这样来写 void page_l

ASP.Net中英文复合检索文本框实现思路及代码_实用技巧

前段时间,写一个用户部门的管理页面,需要对后台获取的用户数据实现英汉检索功能. 同时,选定一个选项之后,需要触发事件与后台交互,将该用户所在的部门显示到页面右边的ListBox控件中.       一.Dojo的FilteringSelect组件实现拼音检索功能 在网上有不少相关的介绍,其中比较经典的有"海盗乱语"的关于重写Dojo的FilteringSelect组件实现拼音检索功能的介绍(地址http://cosbor.web-144.com/?p=38.http://cosbor.

ASP.NET网站管理系统退出 清除浏览器缓存,Session的代码_实用技巧

1.在系统登陆成功时记录登陆的用户名.密码等信息(登陆功能的部分代码) 复制代码 代码如下: Session["id"] = user.id.ToString(); Session["name"] = user.name.ToString(); Session["pwd"] = user.password.ToString(); Session["time"] = user.LoginTime.ToString(); Sess

.aspx中的命名空间设置实现代码_实用技巧

.aspx与.cs文件之间是继承关系,前者继承自后者,故,在.cs文件中写的Public方法可以在.aspx中调用,但Private方法则不能访问,就是这个道理. 在.CS文件中引用命名空间使用using namespace,而在.aspx文件中引用命名空间有两种方式: 1.使用<%@ import namespace="namespace" %> 2.在web.config文件中添加: 复制代码 代码如下: <system.web> <pages>

asp.net中水印的具体实现代码_实用技巧

水印是为了防止别盗用我们的图片. 两种方式实现水印效果 1)可以在用户上传时添加水印. a)   好处:与2种方法相比,用户每次读取此图片时,服务器直接发送给客户就行了. b)   缺点:破坏了原始图片. 2)通过全局的一般处理程序,当用户请求这张图片时,加水印. a)   好处:原始图片没有被破坏 b)   缺点:用户每次请求时都需要对请求的图片进行加水印处理,浪费的服务器的资源. 代码实现第二种方式: 复制代码 代码如下: using System;   using System.Colle

在ASP.NET2.0中通过Gmail发送邮件的代码_实用技巧

    在这里我们主要是使用Gmail,究其原因,是因为,我在使用Gmail的邮箱发送邮件的时候,遇到一小小的困难,而使用163等邮箱的时候,没遇到这个问题.     在ASP.NET2.0中,发送邮件是很简单的,我们主要使用来自命名空间System.Net.Mail中的几个类,MailMessage和SmtpClient.     核心代码是很简洁的,如下:     复制代码 代码如下:  string to = "这里填写接收者的Email地址";      string from

asp.net中文件下载功能的实例代码_实用技巧

复制代码 代码如下: //TransmitFile实现下载protected void Button1_Click(object sender, EventArgs e){ Response.ContentType = "application/x-zip-compressed";Response.AddHeader("Content-Disposition", "attachment;filename=z.zip");string filena