将VIEWSTATE保存在服务器端,减少网络传输负载


Posted on May 19, 2009


ASP.net的VIEWSTATE,真是有点鸡胁,网上看到了这样一个方法可以减少网络传输:

//重写Page类中的LoadPageStateFromPersistenceMedium()和SavePageStateToPersistenceMedium(object state)方法。
//将VIEWSTATE保存在服务器端,减少网络传输负载

protected LosFormatter losFormatter = new LosFormatter();

protected override object LoadPageStateFromPersistenceMedium()
{
	string key = Request.RawUrl + "--viewstate";
	if (Session[key] != null)
	{
		MemoryStream stream = (MemoryStream)Session[key];
		stream.Seek(0, SeekOrigin.Begin);
		return losFormatter.Deserialize(stream);
	}
	return null;
}

protected override void SavePageStateToPersistenceMedium(object state)
{
	string key = Request.RawUrl + "--viewstate";
	MemoryStream stream = new MemoryStream();
	losFormatter.Serialize(stream, state);
	stream.Flush();
	Session[key] = stream;
}

本来觉得这个方法不错,但实际用起来,还是问题多多,主要还是出在RawUrl 的问题,以RawUrl 作为Key来传值的话,有时不小心把URL写错了,如a.aspx?id=1写成了a.aspx?&id=1,这种情况一般也是会出现在程序生成URl的地方

还有一种情况就是URL中的HTML转码问题,发现如“/”,会转成%2f,而且是在回传的时候,也就是说一开始Save的时候是“/”,Postback的时候Load到的值又是“%2f”了,所以值一直取不到,老是在这里出问题。

解决方法:string key = HttpContext.Current.Server.UrlDecode(Request.RawUrl + "--viewstate");


标签:N/A

 

在线学习答案查询入口
微信扫码联系
微信扫码联系