返回首页

ASP.NET-管理状态

时间:2020-01-13 17:02来源:知行网www.zhixing123.cn 编辑:麦田守望者

 超文本传输​​协议(HTTP)是无状态协议。当客户端与服务器断开连接时,ASP.NET引擎将丢弃页面对象。这样,每个Web应用程序都可以扩展以同时服务多个请求,而不会耗尽服务器内存。

但是,需要某种技术来存储请求之间的信息,并在需要时进行检索。该信息,即当前会话中当前用户的所有控件和变量的当前值,称为状态。

ASP.NET管理四种类型的状态:

  • 查看状态
  • 控制状态
  • 会话状态
  • 申请状态
  • 查看状态

    视图状态是页面及其所有控件的状态。它是由ASP.NET框架自动维护的。

    将页面发送回客户端时,将确定页面及其控件的属性中的更改,并将其存储在名为_VIEWSTATE的隐藏输入字段的值中。当页面再次发回时,_VIEWSTATE字段随HTTP请求发送到服务器。

    可以针对以下情况启用或禁用视图状态:

  • 通过在web.config文件的<pages>部分中设置EnableViewState属性来整个应用程序

  • 一个页面通过设置Page指令将EnableViewState属性,如<%@页面语言= “C#”的EnableViewState = “假” %>

  • 通过设置Control.EnableViewState属性的控件

  • 它使用StateBag类定义的视图状态对象来实现,该对象定义了视图状态项的集合。状态包是一个包含属性值对的数据结构,这些属性值对存储为与对象关联的字符串。

    StateBag类具有以下属性:

    性质 描述
    项目名称)
    具有指定名称的视图状态项的值。这是StateBag类的默认属性。
    计数
    视图状态集合中的项目数。
    按键
    集合中所有项目的键集合。
    价值观
    集合中所有项目的值的集合。

    StateBag类具有以下方法:

    方法 描述
    添加(名称,值)
    将一个项目添加到视图状态集合,并更新现有项目。
    明确
    从集合中删除所有项目。
    等于(对象)
    确定指定的对象是否等于当前对象。
    完成
    允许它释放资源并执行其他清理操作。
    GetEnumerator
    返回一个枚举器,该枚举器遍历存储在StateBag对象中的StateItem对象的所有键/值对。
    获取类型
    获取当前实例的类型。
    IsItemDirty
    检查存储在StateBag对象中的StateItem对象,以评估它是否已被修改。
    删除(名称)
    删除指定的项目。
    SetDirty
    设置StateBag对象的状态以及它包含的每个StateItem对象的Dirty属性。
    SetItemDirty
    为StateBag对象中指定的StateItem对象设置Dirty属性。
    ToString
    返回表示状态包对象的字符串。

    以下示例演示了存储视图状态的概念。让我们保留一个计数器,每次单击页面上的一个按钮,该计数器就会在页面回贴时递增。标签控件在计数器中显示该值。

    标记文件代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="statedemo._Default" %>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" >     <head runat="server">       <title>          Untitled Page       </title>    </head>        <body>       <form id="form1" runat="server">                 <div>             <h3>View State demo</h3>                       Page Counter:                          <asp:Label ID="lblCounter" runat="server" />             <asp:Button ID="btnIncrement" runat="server" Text="Add Count" onclick="btnIncrement_Click" />          </div>                 </form>    </body>     </html>

    该示例的文件背后的代码如下所示:

    public partial class _Default : System.Web.UI.Page {    public int counter    {       get       {          if (ViewState["pcounter"] != null)          {             return ((int)ViewState["pcounter"]);          }          else          {             return 0;          }       }              set       {          ViewState["pcounter"] = value;       }    }             protected void Page_Load(object sender, EventArgs e)    {       lblCounter.Text = counter.ToString();       counter++;    } }

    它将产生以下结果:

    查看状态演示

    控制状态

    无法修改,直接访问或禁用控件状态。

    会话状态

    当用户连接到ASP.NET网站时,将创建一个新的会话对象。打开会话状态后,将为每个新请求创建一个新的会话状态对象。该会话状态对象成为上下文的一部分,并且可以通过页面使用。

    会话状态通常用于存储应用程序数据,例如库存,供应商列表,客户记录或购物车。它还可以保留有关用户及其偏好的信息,并跟踪未决操作。

    使用120位的SessionID识别并跟踪会话,该ID从客户端传递到服务器,然后作为cookie或修改的URL返回。SessionID是全局唯一且随机的。

    会话状态对象是从HttpSessionState类创建的,该类定义了会话状态项的集合。

    HttpSessionState类具有以下属性:

    性质 描述
    会话ID
    唯一的会话标识符。
    项目名称)
    具有指定名称的会话状态项的值。这是HttpSessionState类的默认属性。
    计数
    会话状态集合中的项目数。
    暂停
    获取并设置会话状态提供者终止会话之前两次请求之间允许的时间(以分钟为单位)。

    HttpSessionState类具有以下方法:

    方法 描述
    添加(名称,值)
    将一个项目添加到会话状态集合。
    明确
    从会话状态集合中删除所有项目。
    删除(名称)
    从会话状态集合中删除指定的项目。
    移除所有
    从会话状态集合中删除所有键和值。
    RemoveAt
    从会话状态集合中删除指定索引处的项目。

    会话状态对象是一个名称-值对,用于存储和检索会话状态对象中的某些信息。您可以将以下代码用于同一内容:

    void StoreSessionInfo() {    String fromuser = TextBox1.Text;    Session["fromuser"] = fromuser; }  void RetrieveSessionInfo() {    String fromuser = Session["fromuser"];    Label1.Text = fromuser; }

    上面的代码仅在Session字典对象中存储字符串,但是,它可以存储所有原始数据类型和由原始数据类型组成的数组,以及DataSet,DataTable,HashTable和Image对象,以及任何用户-定义的类,该类继承自ISerializable对象。

    以下示例演示了存储会话状态的概念。页面上有两个按钮,一个用于输入字符串的文本框和一个用于显示上次会话存储的文本的标签。

    标记文件代码如下:

    <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default"  %>  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" >     <head runat="server">       <title>          Untitled Page       </title>    </head>        <body>       <form id="form1" runat="server">          <div>             &nbsp; &nbsp; &nbsp;                          <table style="width: 568px; height: 103px">                             <tr>                   <td style="width: 209px">                      <asp:Label ID="lblstr" runat="server" Text="Enter a String"  style="width:94px">                      </asp:Label>                   </td> 					                   <td style="width: 317px">                      <asp:TextBox ID="txtstr" runat="server" style="width:227px">                      </asp:TextBox>                   </td>                </tr> 	                <tr>                   <td style="width: 209px"> </td>                   <td style="width: 317px"> </td>                </tr> 	                <tr>                   <td style="width: 209px">                      <asp:Button ID="btnnrm" runat="server"                          Text="No action button" style="width:128px" />                   </td> 	                   <td style="width: 317px">                      <asp:Button ID="btnstr" runat="server"                          OnClick="btnstr_Click" Text="Submit the String" />                   </td>                 </tr> 	                <tr>                   <td style="width: 209px">  </td> 	                   <td style="width: 317px">  </td>                  </tr> 	                <tr>                   <td style="width: 209px">                      <asp:Label ID="lblsession" runat="server"  style="width:231px"  >                      </asp:Label>                   </td> 	                   <td style="width: 317px">  </td>                </tr> 	                <tr>                   <td style="width: 209px">                      <asp:Label ID="lblshstr" runat="server">                      </asp:Label>                   </td> 	                   <td style="width: 317px">  </td>                </tr>                             </table>                       </div>       </form>    </body> </html>

    在设计视图中,它应类似于以下内容:

    会话设计视图

    文件背后的代码在这里给出:

    public partial class _Default : System.Web.UI.Page  {    String mystr;        protected void Page_Load(object sender, EventArgs e)    {       this.lblshstr.Text = this.mystr;       this.lblsession.Text = (String)this.Session["str"];    }        protected void btnstr_Click(object sender, EventArgs e)    {       this.mystr = this.txtstr.Text;       this.Session["str"] = this.txtstr.Text;       this.lblshstr.Text = this.mystr;       this.lblsession.Text = (String)this.Session["str"];    } }

    执行文件并观察其工作方式:

    会话运行视图

    申请状态

    ASP.NET应用程序是Web服务器上单个虚拟目录中所有网页,代码和其他文件的集合。当信息以应用程序状态存储时,所有用户均可使用。

    为了提供应用程序状态的使用,ASP.NET通过HTTPApplicationState类为每个应用程序创建一个应用程序状态对象,并将该对象存储在服务器内存中。该对象由类文件global.asax表示。

    应用程序状态主要用于存储命中计数器和其他统计数据,全球应用程序数据(如税率,折扣率等),并跟踪用户访问该网站的情况。

    HttpApplicationState类具有以下属性:

    性质 描述
    项目名称)
    具有指定名称的应用程序状态项的值。这是HttpApplicationState类的默认属性。
    计数
    应用程序状态集合中的项目数。

    HttpApplicationState类具有以下方法:

    方法 描述
    添加(名称,值)
    将一项添加到应用程序状态集合。
    明确
    从应用程序状态集合中删除所有项目。
    删除(名称)
    从应用程序状态集合中删除指定的项目。
    移除所有
    从HttpApplicationState集合中删除所有对象。
    RemoveAt
    从索引中删除一个HttpApplicationState对象。
    锁()
    锁定应用程序状态集合,以便只有当前用户才能访问它。
    开锁()
    解锁应用程序状态集合,以便所有用户都可以访问它。

    通常通过编写事件处理程序来维护应用程序状态数据:

  • Application_Start
  • Application_End
  • 应用程序错误
  • 会话开始
  • 会话结束
  • 以下代码片段显示了存储应用程序状态信息的基本语法:

    Void Application_Start(object sender, EventArgs e) {    Application["startMessage"] = "The application has started."; }  Void Application_End(object sender, EventArgs e) {    Application["endtMessage"] = "The application has ended."; }
    ------分隔线----------------------------
    标签(Tag):
    ------分隔线----------------------------
  • 上一篇:ASP.NET-指令
  • 下一篇:ASP.NET-验证器
  • 推荐内容
  • ASP.NET-验证器

    ASP.NET验证控件验证用户输入数据,以确保不会存储无用,未经身份验证或矛盾的数据。 ...

  • ASP.NET-管理状态

    超文本传输协议(HTTP)是无状态协议。 当客户端与服务器断开连接时,ASP.NET引擎将丢...

  • ASP.NET-指令

    ASP.NET指令是用于指定可选设置的指令,例如注册自定义控件和页面语言。 这些设置描述...

  • ASP.NET-基本控件

    在本章中,我们将讨论ASP.NET中可用的基本控件。 按钮控制 ASP.NET提供三种类型的按钮...

  • ASP.NET-客户端

    ASP.NET客户端编码具有两个方面: 客户端脚本 :它在浏览器上运行,从而加快了页面的...

  • ASP.NET-HTML服务器

    HTML服务器控件基本上是对标准HTML控件的增强,它们可以启用服务器端处理。 服务器不...

  • 猜你感兴趣
  • 教育技术学动态
  • 教育技术学论文
  • 理论研究
  • 应用研究
  • 资源收藏
  • 百家观点
  • 英文文献
  • 中国电化教育
  • 电化教育研究
  • 中国远程教育
  • 开放教育研究
  • 现代教育技术
  • 远程教育杂志
  • 现代远距离教育
  • 中国教育信息化
  • 中国信息技术教育
  • 中小学信息技术
  • Flash龙8国际平台入口
  • Photoshop龙8国际平台入口
  • 3DMAX龙8国际平台入口
  • AutoCAD龙8国际平台入口
  • CorelDRAW龙8国际平台入口
  • Matlab龙8国际平台入口
  • 其他龙8国际平台入口
  • .Net龙8国际平台入口
  • Asp龙8国际平台入口
  • Php龙8国际平台入口
  • Jsp龙8国际平台入口
  • Ajax龙8国际平台入口
  • Android教程
  • 其他龙8国际平台入口
  • Word教程
  • Excel教程
  • PowerPoint教程
  • Ubuntu教程
  • 其他教程
  • 课件下载
  • 软件下载
  • 视频教程下载
  • 其他下载
  • 教案大全
  • 试题大全
  • 课件大全
  • 其他大全
  • 人像摄影
  • 风光摄影