1.首先我写了一个类RewriteOnInit,用来去掉viewstate的垃圾代码.
2.在Default页面中继承这个接口类: public partial class Default : RewriteOnInit当我按照第二步写时, Default页面上的服务器控件就会出现"创建控件时出错,请求在此上下文中不可用",但是浏览页面或者调试都正常的。如果我把第二步改回 public partial class Default :System.Web.UI.Page 那它就正常了 各位有遇到过这个问题吗?期待解决(不然设计页面太难看了!)RewriteOnInit类的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI.WebControls;
public class RewriteOnInit : System.Web.UI.Page
{
public RewriteOnInit()
{ }
#region 重写OnInit事件 protected override void OnInit(EventArgs e)
{
if (!IsPostBack)
{
SavePageStateToPersistenceMedium(e);
LoadPageStateFromPersistenceMedium();
base.OnInit(e);
}
} #endregion #region 去除Viewstate垃圾代码 protected System.Web.UI.LosFormatter losFormatter = new System.Web.UI.LosFormatter(); 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;
} protected override object LoadPageStateFromPersistenceMedium()
{
string key = Request.RawUrl + "__viewstate";
if (Session[key] != null)
{
System.IO.MemoryStream stream = (System.IO.MemoryStream)Session[key];
stream.Seek(0, System.IO.SeekOrigin.Begin);
return losFormatter.Deserialize(stream);
}
return null;
} #endregion
}
2.在Default页面中继承这个接口类: public partial class Default : RewriteOnInit当我按照第二步写时, Default页面上的服务器控件就会出现"创建控件时出错,请求在此上下文中不可用",但是浏览页面或者调试都正常的。如果我把第二步改回 public partial class Default :System.Web.UI.Page 那它就正常了 各位有遇到过这个问题吗?期待解决(不然设计页面太难看了!)RewriteOnInit类的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Web.UI.WebControls;
public class RewriteOnInit : System.Web.UI.Page
{
public RewriteOnInit()
{ }
#region 重写OnInit事件 protected override void OnInit(EventArgs e)
{
if (!IsPostBack)
{
SavePageStateToPersistenceMedium(e);
LoadPageStateFromPersistenceMedium();
base.OnInit(e);
}
} #endregion #region 去除Viewstate垃圾代码 protected System.Web.UI.LosFormatter losFormatter = new System.Web.UI.LosFormatter(); 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;
} protected override object LoadPageStateFromPersistenceMedium()
{
string key = Request.RawUrl + "__viewstate";
if (Session[key] != null)
{
System.IO.MemoryStream stream = (System.IO.MemoryStream)Session[key];
stream.Seek(0, System.IO.SeekOrigin.Begin);
return losFormatter.Deserialize(stream);
}
return null;
} #endregion
}
出现此错误的原因是由于HttpContext.Current为空造成的。所以在protected override void OnInit(EventArgs e)事件中加
if (HttpContext.Current != null)的判断应该就可以了。我没试过,你自己试一下吧。
浏览或者调试时是对的
{
base.OnInit(e);
if (HttpContext.Current != null)
{
//TODO:Something
}
}