如何从共享类中访问ViewState?

时间:2016-04-15 12:57:40

标签: c# asp.net

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

可以将ViewState传递给函数吗?

若然,怎么样?

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

1 个答案:

答案 0 :(得分:0)

这是关键声明:

  

需要ViewState值的常用例程

但功能并非真正需要" ViewState"价值 - 他们只需要价值观。如果函数在stringint上运行,那么以这种方式编写函数会更好,这样可以更容易进行单元测试。

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

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

然后添加一个构造函数或扩展方法,用于加载ViewState的值。

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;
    }
}

通过这种方式,您可以在ViewStatePage_Load提取类(或根据需要创建新实例),阅读,操作,将其传递给其他函数,然后当您&#39 ;完成后你只需将完整的东西保存回ViewState