利用SessionPageStatePersister将ViewState信息存储到服务器

由于项目的需求,其实也可以说不是,只是Web Application中的部分页面实在太大,有些页面体积超过了2M,这其中又以ViewState为最,因为偶的PM对UI的要求甚高,可以说是极高,所以不得不运用了很多特效,其实光页面本身的功能,应该说所占用的带宽是很少的。
鉴于网络带宽的限制以及不少客户的抱怨,我们Team不得不想办法把页面中体积巨大的ViewState想办法挪位,使其不用默认的隐藏字段来存储,而是用Session来存储,Session是存储在Server上的,所以变相的也把ViewState存储到Server上了。

 

其实这方面的资料很多,随便搜搜就有很多,无外乎是这么一段代码。

 

    protected override PageStatePersister PageStatePersister
    {
        get { return new SessionPageStatePersister(this); }
    }

 

呵呵,其实这段代码的确起作用,但是这只解决了问题的一半,问题出现在GridView上的DataKey,这个ControlState会丢失,原因是SessionPageStatePersiste可能被多次调用。所以你会发现,当你去点击GridView具体某行数据的Edit时,会需要这个DataKey,而这个时候会出现Index is out of range这个错误。

 

所以必须用下列这段代码来替代之前的那段,才能把问题彻底解决。

 

    PageStatePersister _pers;
    protected override PageStatePersister PageStatePersister
    {
        get
        {
            if (_pers == null)
                _pers = new SessionPageStatePersister(this);
            return _pers;
        }
    }

你可以把这段代码放在你的基类中,这个类继承于System.Web.UI.Page,这样就不用每个页面都去手工加载。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值