怎么去除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

解决方案 »

  1.   

    如果页面中用到了例如文本框或者输入类的控件只能禁止某些控件的viewstate,这样的结果是页面中还会产生那些乱码。如果没有这些就方便了。直接将页面中的form控件去掉。所有的乱码就都没有了。
      

  2.   

    不知道viewstate的乱码(base64)有什么影响吗?美观?如果为了美观可以用js屏蔽鼠标右键;
      

  3.   

    我也纠结过浏览器查看源码能好看些,你可以自己重写控件,或者换其他语言、技术  mvc可以的
      

  4.   

    是这样的,我们这了seo部门说这影响seo,可蛋疼
      

  5.   

    让你们部门换成ASP.NET MVC来开发,MVC里面是不会含有你说的那些东西的。
      

  6.   

    问题是我们做的都是些企业站,用mvc太大了吧
      

  7.   

    1.用MVC
    2.禁用viewstate //viewstate=false
    并且页面中不用带事件性制的服务器控件 例如:asp:botton 直接用 html的submit等
    并且将<from id="form1" action="xxx.aspx" runat="server" 这个runat="server"去掉这样同样可以用Reapter来显示数据,不会出现乱码 就是button有点麻烦需要用提交机制