怎么去除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;
}
其他更好的解决办法??.net 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;
}
其他更好的解决办法??.net viewstate
解决方案 »
- 后台调用js问题
- 初学者想多看看代码和实例,能否提供一些下载源码比较好的网站?
- DetailsView和ObjectDataSource绑定时如何修改显示字段值为字段值和一个int变量相加?
- 关于JS脚本与后台交互的问题
- OleDbDataReader 可否嵌套?
- 怎样把服务器上的数据库备份到客户端机器上?
- 如何将aspx后台生成的图片,绑定到前台页面
- 两个项目之间如何共享web.config?
- SqlDataAdapter需要打开和关闭连接吗?如果不做会有什么不良后果吗?
- 验证Email 的格式
- 在aspx文件中,这个表达式要怎么写呢?
- RadUpload控件为何当文件小于5M时进度条不显示
2.禁用viewstate //viewstate=false
并且页面中不用带事件性制的服务器控件 例如:asp:botton 直接用 html的submit等
并且将<from id="form1" action="xxx.aspx" runat="server" 这个runat="server"去掉这样同样可以用Reapter来显示数据,不会出现乱码 就是button有点麻烦需要用提交机制