我编写了一些网页,这些网页使用需要 ViewState 值的常见例程。
能否将 ViewState 传递到函数中?
如果是,怎么做到的?
如果没有,我还能如何从类中的方法访问它们?
最佳答案
这是关键语句:
common routines that required ViewState values
但是函数并不真正需要“ViewState”值——它们只需要值。如果函数对 string
或 int
进行操作,那么最好以这种方式编写函数,这样更容易进行单元测试。
如果您想要读取和/或操作一些非常具体的值,那么您可以创建一个这样的类:
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.
}
}
更好的是,只需将整个类序列化到 View 状态并从那里检索它。
[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
。
关于c# - 如何从共享类中访问 ViewState?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36647820/