每个 Web 窗体控件都有一个 ViewState 属性(从 Control 继承),该属性使 Web 窗体控件能够参与 ViewState 管理。ViewState 的类型为 Sytem.Web.UI.StateBag,这是等效于哈希表的数据结构。控件可以将数据作为键/值对保存在 ViewState 中。ViewState 通过 ASP.NET 页框架保持为字符串变量,并以隐藏变量的形式与客户端之间往返。回发时,页框架分析来自隐藏变量的输入字符串,并在页的控件层次结构中填充每个控件的 ViewState 属性。通过使用 ViewState 属性,控件可以还原其状态(将属性和字段设置为它们回发前的值)。
public bool Signed
{
get
{
if(ViewState["Signed"]==null)
ViewState["Signed"] = false;
return (bool)ViewState["Signed"];
}
set
{
ViewState["Signed"] = value;
}
}
红色标记的代码段是为ViewState设置默认值,否则控件的该属性在设计器的属性窗口将显示“未将对象设置到引用的实例”。字符串类型的属性不存在该问题。