我写了一些使用需要ViewState值的常用例程的网页。
可以将ViewState传递给函数吗?
若然,怎么样?
如果没有,我还可以从类中的方法访问它们吗?
答案 0 :(得分:0)
这是关键声明:
需要ViewState值的常用例程
但功能并非真正需要" 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.
}
}
更好的是,只需将整个类序列化为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;
}
}
通过这种方式,您可以在ViewState
处Page_Load
提取类(或根据需要创建新实例),阅读,操作,将其传递给其他函数,然后当您&#39 ;完成后你只需将完整的东西保存回ViewState
。