首页新闻找找看学习计划

.net viewstate问题

0
悬赏园豆:50 [已解决问题] 解决于 2013-07-16 10:13

怎么去除viewstate那些乱码呢???如果直接关掉的话,好多服务器控件功能就不管用了,大家来帮我解决一下吧,谢谢了

第一种方法,存到服务器上,这种方法会产生许多垃圾文件,不可取

protected override object LoadPageStateFromPersistenceMedium()
{

string viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;
string stateStr = (string)Cache[viewStateID];
if (stateStr == null)
{
string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
stateStr = File.ReadAllText(fn);
}
return new ObjectStateFormatter().Deserialize(stateStr);
}

protected override void SavePageStateToPersistenceMedium(object state)
{
string value = new ObjectStateFormatter().Serialize(state);
string viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //产生离散的id号码
string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
//ThreadPool.QueueUserWorkItem(File.WriteAllText(fn, value));
File.WriteAllText(fn, value);
Cache.Insert(viewStateID, value);
base.SavePageStateToPersistenceMedium(viewStateID);
}

 

第二种方法不知道session会不会丢失,如果丢失了肯定会有影响,怎么办??

protected LosFormatter losFormatter = new LosFormatter();

protected override object LoadPageStateFromPersistenceMedium()
{
string key = Request.RawUrl + "__viewstate";

if (Session[key] != null)
{
object obj = null;
using (System.IO.MemoryStream stream = (System.IO.MemoryStream)Session[key])
{
stream.Seek(0, System.IO.SeekOrigin.Begin);
obj = losFormatter.Deserialize(stream);
}
Session[key] = null;
return obj;
}

return null;
}

protected override void SavePageStateToPersistenceMedium(object viewState)
{
string key = Request.RawUrl + "__viewstate";
System.IO.MemoryStream stream = new System.IO.MemoryStream();
losFormatter.Serialize(stream, viewState);
stream.Flush();
Session[key] = stream;

}

其他更好的解决办法??

树形图的主页 树形图 | 初学一级 | 园豆:5
提问于:2013-01-07 22:32
< >
分享
最佳答案
0

用MVC

收获园豆:10
geass.. | 小虾三级 |园豆:1777 | 2013-01-08 20:24
其他回答(6)
0

不用服务器控件多好。。

向往-SONG | 园豆:4853 (老鸟四级) | 2013-01-07 23:03

做企业站要速度的

支持(0) 反对(0) 树形图 | 园豆:5 (初学一级) | 2013-01-08 09:18

@weiwin124: 

哪有,服务器控件没速度又没效率

支持(0) 反对(1) 向往-SONG | 园豆:4853 (老鸟四级) | 2013-01-08 09:39
0

你可以有选择关闭一些viewstate,比如gridview的这种就可以关掉,一些button的可以不关闭

每个控件都有一个viewstate属性,你置为false就行了

收获园豆:10
Rich.T | 园豆:3438 (老鸟四级) | 2013-01-08 00:01

绑定数据的控件关掉的话,翻页什么的话会出问题吧

支持(0) 反对(0) 树形图 | 园豆:5 (初学一级) | 2013-01-08 09:20

@weiwin124: 

你不会是分页用的控件自带的吧??

支持(0) 反对(0) Rich.T | 园豆:3438 (老鸟四级) | 2013-01-08 09:21

@Rich.T: 是从网上找的控件

支持(0) 反对(0) 树形图 | 园豆:5 (初学一级) | 2013-01-08 11:17

@weiwin124: 

那这个当然不会影响分页

支持(0) 反对(0) Rich.T | 园豆:3438 (老鸟四级) | 2013-01-08 11:20
1

你的 都不可取,还是 直接使用,不要管了。

收获园豆:5
Qlin | 园豆:2403 (老鸟四级) | 2013-01-08 08:35
0

最简单的方式就是右键编辑项目文件,然后另存,格式为utf-8.然后覆盖。就ok了。如果不行。俺帮不了你了

收获园豆:5
深圳_猫仔 | 园豆:16 (初学一级) | 2013-01-08 09:18
0

既然选择了快速,方便,那就用呗。

使用viewstate,还需要访问物理文件,每个请求都这样,得有多慢啊

如果在正常的使用过程中,页面合理的设计,构造,viewstate应该不是性能的主要原因

收获园豆:10
chenping2008 | 园豆:9836 (大侠五级) | 2013-01-08 09:34
0

可以使用第一种办法,路径上再加上SessionID,Session失效后删除对应的文件夹

收获园豆:10
Tom.汤 | 园豆:1676 (小虾三级) | 2013-01-08 12:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册