首页 > 开发 > 综合 > 正文

自定义ViewState的保存方式

2024-07-21 02:29:20
字体:
来源:转载
供稿:网友

大家都知道asp.net中使用viewstate来在客户端与服务端之间保存页面中的信息及用户自定义的信息.
在2.0之前的版本中,viewstate是保存在页面中的隐藏控件中的:__viewstate
我们无法改变viewstate的保存方式及保存位置.
现在在2.0中,asp.net开放了这个功能,允许我自定义viewstate的保存位置.
在2.0的page类中新增了一个属性:pagestatepersister.
我们可以重写这个属性来实现自定义viewstate的保存.这个属性要返回一个继承自pagestatepersister类的子类的一个实例.
2.0中默认提供了两种保存方法:一个是保存在页面中(hiddenfieldpagestatepersister ),另外一个是保存在session中(sessionpagestatepersister ).
下面的代码重写了pagestatepersister属性,将viewstate保存到session中:

    protected override pagestatepersister pagestatepersister
    {
        get
        {
            return new sessionpagestatepersister(this);
        }
    }
除了这两种默认的保存方式外,我们可以继承pagestatepersister类,来实现自己的保存方式.
以下的代码演示了如果将viewstate保存到文件中:
using system;
using system.data;
using system.configuration;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using system.io;
using system.runtime.serialization.formatters.binary;


/**//// <summary>
/// cwingviewstate 的摘要说明
/// </summary>
public class cwingviewstate : pagestatepersister
{
    public cwingviewstate(page page):base(page)
    {
    }

    public override void load()
    {
        readfile();
    }

    public override void save()
    {
        writefile();
    }

    private void writefile()
    {
        filestream file = file.create(@"c:/customerviewstate.cw");
        binaryformatter bf = new binaryformatter();
        bf.serialize(file, base.viewstate);
        file.flush();
        file.close();
    }

    private void readfile()
    {
        filestream file = file.openread(@"c:/customerviewstate.cw");
        binaryformatter bf = new binaryformatter();
        base.viewstate = bf.deserialize(file);
    }
}

具体的页面中:
    protected override pagestatepersister pagestatepersister
    {
        get
        {
            return new cwingviewstate(this);
        }
    }


出处:.net空间 blog

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表