如何从共享类中访问ViewState
本文关键字:访问 ViewState 共享 | 更新日期: 2024-09-08 02:54:56
我写了一些网页,这些网页使用需要ViewState值的通用例程。
ViewState可以传递到函数中吗?
如果是,如何?
如果没有,我还能从类中的方法访问它们吗?
这是关键语句:
需要ViewState值的通用例程
但函数实际上并不需要"ViewState"值,它们只需要值。如果一个函数在string
或int
上运行,那么最好用这种方式编写函数,这样更容易进行单元测试。
如果你想读取和/或操作一些非常具体的值,那么你可以创建一个这样的类:
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_Load
从ViewState
中提取类(或者在需要时创建一个新实例),读取它,操作它,将它传递给其他函数,然后在完成后,将整个内容原封不动地保存回ViewState
。