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
}

解决方案 »

  1.   

    能有什么解决方案,所以页面(类)必须继承System.Web.UI.Page除非你去跟MS谈
      

  2.   

    RewriteOnInit类中不是已经继承了System.Web.UI.Page
      

  3.   

    创建控件时出错,请求在此上下文中不可用
    出现此错误的原因是由于HttpContext.Current为空造成的。所以在protected override void OnInit(EventArgs e)事件中加
    if (HttpContext.Current != null)的判断应该就可以了。我没试过,你自己试一下吧。
      

  4.   

    应该是Default 没有找到 RewriteOnInit的路径,请为他们都加上命名空间
      

  5.   

    以上写的那个类的效果是执行的 我估计着是设计页面时没有继续System.Web.UI.Page
    浏览或者调试时是对的
      

  6.   

    何必这么麻烦呢?如何关闭viewstate关闭viewstate,控件状态不会回传,会有一些麻烦的。客观看待ViewState对Asp.net程序作用和影响
      

  7.   

    这么试一下protected override void OnInit(EventArgs e)
            {            
                base.OnInit(e);           
                if (HttpContext.Current != null)
                {
                    //TODO:Something
                    
                }
            }
      

  8.   

    把方法里的Request、response换成HttpContext.Current.Request,HttpContext.Current.Response要只是为了去掉ViewState何必如此麻烦?