ViewState机制由浅入深3

2.2.4  StateBag类

ViewState是控件的一个属性,用来使用控件具有记忆功能。在前边的讲述中,我们可以看到控件的一些属性通过使用ViewState能够恢复原来的值,保存本次的值,在Control类中很多方法的实现也是直接调用了ViewState的方法。ViewState的类型是StateBag,下面我们就了解一下在StateBag中是如何实现这些功能的。StateBag定义在System.Web.UI中声明如下:

public sealed class StateBag : IStateManager, IDictionary, ICollection, IEnumerable

StateBag类可以理解为是一个具有状态管理功能的字典,因为它实现了IStateManager, IDictionary 这两个接口。StateBag类可以象字典那样保存Key/Value对,其中Key是字符串而Value是对象。下面是一个使用StateBag的例子。

  protected void Button2_Click(object sender, EventArgs e)
  {
    StateBag TestSB = new StateBag();
    TestSB["b"] = "bbbbb";
    TextBox1.Text = TestSB["b"].ToString();
}

在上面的例子中使用StateBag保存一个Key为“b”,其值为“bbbbb”的Key/Value对。ViewState属性也是StateBag的一个实例,当然也就可以象上面那样使用。在ViewState中保存了很多的Key/Value对(键值对),这些Key/Value对用来保存控件的属性,这些Key/Value对是有ASP.Net来维护的。当然我们也可以增加一些自己的Key/Value对,来保存一些信息。

StateBag还实现System.Web.UI.IStateManager接口,这样它具有状态管理功能。下面对StateBag如何提供状态管理功能进行说明。

1)   StateItem类

StateBag中保存Key/Value对,Key是String类型,Value是Object类型。但是在StateBag内部保存Value不是Object类型,而是将Object类型转换为StateItem类型然后保存,从StateBag中取出的时候再将StateItem类型转换为Object类型,也就是说StateBag中的Key/Value对实际上是String/StateItem类型。转换过程是在StateBag内部实现客户感觉不到。StateItem的声明如下:

public sealed class StateItem
{
  internal StateItem(object initialValue);
  public bool IsDirty { get; set; }
  public object Value { get; set; }
}

通过上面的代码我们可以看出实际上多了一个IsDirty属性,来标记当前的Value是否已经被修改过。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索key
, 属性
, 类型
, viewstate
, value
一个
viewstate保存机制、viewstate、viewstate的用法、viewstate生命周期、asp.net viewstate,以便于您获取更多的相关知识。

时间: 2024-08-19 05:59:32

ViewState机制由浅入深3的相关文章

ViewState机制由浅入深1

1 ViewState机制是什么? ViewState机制是asp.net中对同一个Page的多次请求(PostBack)之间维持Page及控件状态的一种机制.在WebForm中每次请求完,Page对象都会被释放,对同一个Page的多次请求之间的状态信息,如何进行维护呢?WebForm中,每次请求都会存在客户端和服务器之间的一个交互.如果请求完成之后将一些信息传回到客户端,下次请求的时候客户端再将这些状态信息提交给服务器,服务器端对这些信息使用和处理,再将这些信息传回给客户端.这样是不是就可以对

ViewState机制由浅入深2

2.2.2 Pair类及ViewState的存储 Page及所有控件的ViewState.ControlState都是存储在Pair类的实例中,了解Pair类及ViewState如何存储在Pair类中很重要.Pair定义的System.Web.UI中具体定义如下: public sealed class Pair { public object First; public object Second; public Pair(); public Pair(object x, object y);

用 ASP.NET 2.0 改进的 ViewState 加快网站速度

asp.net|速度     如果您是个经验丰富的 ASP.NET 开发人员,一提起 ViewState ,您可能会不寒而栗,因为您想到的是大量通过"鸡尾酒吸管"吸入的 Base64 编码数据.除非采取步骤进行预防,否则大部分 ASP.NET 页面将有大量辅助数据被存储在一个名为 __VIEWSTATE 的隐藏字段中,多数情况下,甚至不需要这个字段.浏览用 ASP.NET 生成的您喜爱的站点,查看页面源代码,计算隐藏在 __VIEWSTATE 字段中的字符数.我尝试了一下,数量为 80

实现ASP.NET程序性能目标的几种方法

asp.net|程序|性能 第一次在这里写BLOG,希望不要被大家取笑!   一. 调整程序代码   1.避免多次读取相同数据   在循环语句中不要包含无端重复执行的代码,如:   while ( dr.read())   {   if(dr.item["lastname"]==Request.params["lastname"])   return true;   else   return false;   }   在上面循环中,对于DataReader返回的每

C#+ASP.NET 2.0定制复合组件之基础篇

asp.net 摘要:在本系列文章中,我们首先讨论使用ASP.NET 2.0构建一个标准ListBox控件的增强版本(EnhancedListBox).这个控件能够对它的项进行重排序,并且能够实现客户端与服务器端的同步功能.然后,我们把这样的两个控件组合起来创建一个复合控件(ListMover). 一. 引言 构建提供丰富的客户端接口的复杂Web控件经常需要把一些客户端JavaScript代码与控件的服务器端代码集成到一起.然而,在一些情况下,为了达到某种巧妙的效果而把问题搞得过于复杂经常会破坏

轻松解决页面回传后页面滚动到顶端

解决|页面 轻松解决页面回传后页面滚动到顶端 页面回传后页面滚动到顶端,造成这一问题的原因是页面回传,其实等于载入一次页面,新载入的页面会定点到页面的顶端.这一特点会造成很差的用户使用感受,如何解决这一问题呢,我们可以借用隐藏的ViewState机制保存当前页面滚动的位置,在页面回传后调用. <%@ Page language="c#" Codebehind="Test_THIN.aspx.cs" AutoEventWireup="false&quo

Asp.Net下的DataGrid的多层表头

asp.net|datagrid 先看下表:业务员 地 区 北京 上海 深圳 张三 100 200 300 实际上Asp.Net下的DataGrid只不过是一个HtmlTable,只不过在HtmlTable的基础上添加了很多属性.方法,纳入ViewState机制,来生成.控制它:有了这一点认识,事情就很好办了: 我们可以在属性生成器中可以定义列的表头,它实际上只不过是在列之间插入了"</td><td>"的html标记,如此而已:因此根据上面的例子,可以在第3列的

实现性能目标的几种方法

性能 第一次在这里写BLOG,希望不要被大家取笑!一. 调整程序代码1.避免多次读取相同数据 在循环语句中不要包含无端重复执行的代码,如:while ( dr.read()){ if(dr.item["lastname"]==Request.params["lastname"]) return true; elsereturn false;}在上面循环中,对于DataReader返回的每条记录都要对Request.params["lastname"

ASP.NET学习日记文章集

asp.net Web service到底是什么:在什么情况下你应该使用Web service. 分布式应用程序和浏览器 研究一下当前的应用程序开发,你会发现一个绝对的倾向:人们开始偏爱基于浏览器的瘦客户应用程序.这当然不是因为瘦客户能够提供更好的用户界面,而是因为它能够避免花在桌面应用程序发布上的高成本.发布桌面应用程序成本很高,一半是因为应用程序安装和配置的问题,另一半是因为客户和服务器之间通信的问题. 传统的Windows富客户应用程序使用DCOM来与服务器进行通信和调用远程对象.配置好D