NET Framework类库 StateBag 类 1. 概述 管理 ASP.NET 服务器控件(包括页)的视图状态。无法继承此类。 Control.ViewState 属性是 StateBag 类的实例。 有关此类型所有成员的列表,请参阅 StateBag 成员。 System.Object System.Web.UI.StateBag [定义][C#] public sealed class StateBag : IStateManager, IDictionary,ICollection, IEnumerable [线程安全] 此类型的所有公共静态(Visual Basic 中为 Shared)成员对多线程操作而言都是安全的。但不保证任何实例成员是线程安全的。 [备注] 页或控件的视图状态是该页或控件的累计属性值或视图。可以通过 Control.ViewState 属性访问此类。 此类是所有 HTML 和 Web 服务器控件的主存储机制。它将属性/值对存储为与控件关联的字符串。仅在为页请求执行 OnInit 方法后,它才跟踪这些属性的更改,并将更改保存到页或控件的视图状态。 在控件处理生存期的任何阶段可以从此类读取,但是当控件正在呈现时不应该向此类写入。 此类实现一个字典,可以像对待任何字典对象那样从其中添加或移除项。有关数据集合(如字典)的更多信息,请参见将数据组合到集合中。 [示例] 下面的示例说明一个具有 Text 和 FontSize 属性的复合 Label 控件。当在该控件上调用 Control.Render 方法时,这些属性保存到视图状态并从视图状态检索。 ------------------------------------------------------------------------------------------------------- [C#] // This control renders values stored in view state for Text and FontSize properties. using System; using System.Web; using System.Web.UI; namespace ViewStateControlSamples { public class Label: Control { // Add property values to view state with set; // retrieve them from view state with get. public String Text { get { return (String) ViewState["Text"]; } set { ViewState["Text"] = value; } } public int FontSize { get { return (int) ViewState["FontSize"]; } set { ViewState["FontSize"] = value; } }
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] protected override void Render(HtmlTextWriter output) { output.Write("" + this.Text + ""); } } } --------------------------------------------------------------------------------------------- 2.构造函数 2.1 StateBag 构造函数 public StateBag(); 初始化 StateBag 类的新实例。这是此类的默认构造函数。 public StateBag(bool); 初始化 StateBag 类的新实例,该实例允许存储的状态值不区分大小写。 忽略大小写为 true;否则为 false。 3.属性 3.1 StateBag.Count 属性 获取 StateBag 对象中的 StateItem 对象数。 属性值 是 StateBag 对象中的项数。 实现 ICollection.Count 使用示例: ----------------------------------------------------- [C#] private string GetMruList(string selectedValue) { StateBag state = ViewState; if (state.Count > 0) { int upperBound = state.Count; string[] keys = new string[upperBound]; StateItem[] values = new StateItem[upperBound]; state.Keys.CopyTo(keys, 0); state.Values.CopyTo(values, 0); StringBuilder options = new StringBuilder(); for(int i = 0; i < upperBound; i++) { options.AppendFormat("