如何从共享类中访问ViewState

本文关键字:访问 ViewState 共享 | 更新日期: 2024-09-08 02:54:56

我写了一些网页,这些网页使用需要ViewState值的通用例程。

ViewState可以传递到函数中吗?

如果是,如何?

如果没有,我还能从类中的方法访问它们吗?

如何从共享类中访问ViewState

这是关键语句:

需要ViewState值的通用例程

但函数实际上并不需要"ViewState"值,它们只需要值。如果一个函数在stringint上运行,那么最好用这种方式编写函数,这样更容易进行单元测试。

如果你想读取和/或操作一些非常具体的值,那么你可以创建一个这样的类:

public class MyPageValues
{
    public string Value1 {get;set;}
    public string Value2 {get;set;}
}

然后添加从CCD_ 3加载值的构造函数或扩展方法。

public class MyPageValues
{
    public string Value1 {get;set;}
    public string Value2 {get;set;}
    public MyPageValues(){} //default constructor
    public MyPageValues(System.Web.UI.StateBag viewState)
    {
        Value1 = (string)viewState["Value1"];
        Value2 = integer.Parse(viewState["Value2"]); //Do some better checking.
    }
}

更好的是,只需将整个类序列化到viewstate中,然后从那里检索它。

[Serializable()]
public class MyValues
{
    public string Value1 {get;set;}
    public string Value2 {get;set;}
}
public partial class YourPage: System.Web.UI.Page
{
    private MyValues _values;
    protected void Page_Load(object source, EventArgs e)
    {
        _values = ViewState["myValues"] as MyValues ?? new MyValues ();
    }
    protected void Page_PreRender(object sender, EventArgs e)
    {
        ViewState["myValues"] = _values;
    }
}

这样,您就可以在Page_LoadViewState中提取类(或者在需要时创建一个新实例),读取它,操作它,将它传递给其他函数,然后在完成后,将整个内容原封不动地保存回ViewState