首页 > Web开发 > 详细

ASP.NET无效的视图

时间:2015-10-15 17:49:22      阅读:196      评论:0      收藏:0      [点我收藏+]

转载SP1234的办法:

如果你使用了一些比较复杂的控件(asp.net控件方式的HTML编辑器并且包含了一篇复杂文章就经常如此),看看你的页面上的ViewState是不是很大。如果很大,可以使用我下面的代码放到你的页面中:

  static private DirectoryInfo _Dir;
    private DirectoryInfo Dir
    {
        get
        {
            if (_Dir == null)
            {
                _Dir = new DirectoryInfo(Server.MapPath("~/App_Data/"));
                if (!_Dir.Exists)
                    _Dir.Create();
                _Dir = new DirectoryInfo(Path.Combine(_Dir.FullName, "ViewState"));
                if (!_Dir.Exists)
                    _Dir.Create();
            }
            return _Dir;
        }
    }

    protected override object LoadPageStateFromPersistenceMedium()
    {
        PageStatePersister ps = this.PageStatePersister;
        ps.Load();
        if (ps.ControlState != null)
            ps.ControlState = UNSerialization((string)ps.ControlState);
        if (ps.ViewState != null)
            ps.ViewState = UNSerialization((string)ps.ViewState);
        return new Pair(ps.ControlState, ps.ViewState);
    }

    protected override void SavePageStateToPersistenceMedium(object state)
    {
        PageStatePersister ps = this.PageStatePersister;
        if (state is Pair)
        {
            Pair pair = (Pair)state;
            ps.ControlState = pair.First;
            ps.ViewState = pair.Second;
        }
        else
        {
            ps.ViewState = state;
        }
        if (ps.ControlState != null)
            ps.ControlState = Serialization(ps.ControlState);
        if (ps.ViewState != null)
            ps.ViewState = Serialization(ps.ViewState);
        ps.Save();
    }

    private object UNSerialization(string stateID)
    {
        string stateStr = (string)Cache[stateID];
        string file = Path.Combine(Dir.FullName, stateID);
        if (stateStr == null)
            stateStr = File.ReadAllText(file);
        else
            Cache.Remove(stateID);
        return new ObjectStateFormatter().Deserialize(stateStr);
    }

    private string Serialization(object obj)
    {
        string value = new ObjectStateFormatter().Serialize(obj);
        string stateID = (DateTime.Now.Ticks + (long)value.GetHashCode()).ToString(); //产生离散的id号码   
        File.WriteAllText(Path.Combine(Dir.FullName, stateID), value);
        Cache.Insert(stateID, value);
        return stateID;
    }

    protected override void OnUnload(EventArgs e)
    {
        base.OnUnload(e);
        DateTime dt = DateTime.Now.AddMinutes(-20);
        foreach (FileInfo fl in Dir.GetFiles())
            if (fl.LastAccessTime < dt)
                try
                {
                    fl.Delete();
                }
                catch
                {
                }
    }

 

ASP.NET无效的视图

原文:http://www.cnblogs.com/chquwa/p/4882660.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!