- 第1节:ASP.NET 简介
- 第2节:ASP.NET 环境设置
- 第3节:ASP.NET 生命周期
- 第4节:ASP.NET 实例
- 第5节:ASP.NET 事件处理
- 第6节:ASP.NET 服务器端
- 第7节:ASP.NET ADO.NET
- 第8节:ASP.NET 服务器控件
- 第9节:ASP.NET 文件上传
- 第10节:ASP.NET HTML 服务器
- 第11节:ASP.NET 广告轮转器
- 第12节:ASP.NET 客户端
- 第13节:ASP.NET 日历
- 第14节:ASP.NET 基础控件
- 第15节:ASP.NET 多视图
- 第16节:ASP.NET 指令
- 第17节:ASP.NET Panel 控件
- 第18节:ASP.NET 管理状态
- 第19节:ASP.NET Ajax 控制
- 第20节:ASP.NET 验证器
- 第21节:ASP.NET 数据源
- 第22节:ASP.NET 数据库存取
- 第23节:ASP.NET 数据绑定
- 第24节:ASP.NET 自定义控件
- 第25节:ASP.NET 个性化
- 第26节:ASP.NET 异常处理
- 第27节:ASP.NET 调试
- 第28节:ASP.NET 语言集成查询
- 第29节:ASP.NET 安全性
- 第30节:ASP.NET 数据缓存
- 第31节:ASP.NET Web 服务
- 第32节:ASP.NET 多线程
- 第33节:ASP.NET 配置
- 第34节:ASP.NET 部署
ASP.NET 管理状态
管理状态
超文本传输协议(HTTP)是一种无状态协议。当客户端从服务器断开连接时,ASP.NET 引擎将丢弃页面对象。这样一来,每个 Web 应用程序能够扩展到同时用于大量请求,但是不会耗尽服务器内存。
然而,需要有一些技术来存储各个请求之间的信息并在需要时取回。这个信息则称为状态,即所有控件的当前值和在当前会话中当前用户使用的变量。
ASP.NET 管理四种状态:
- 视图状态
- 控制状态
- 会话状态
- 应用程序状态
视图状态
视图状态是页面及其所有控件的状态。它通过 ASP.NET 框架的反馈保持不变。
当一个页面被发送回客户端,这些页面变化的属性及其控件是确定的,并存储在名为 _VIEWSTATE 的一个隐藏输入字段的值内。当页面被再次回发时,_VIEWSTATE 字段随 HTTP 请求被发送到服务器。
视图状态可以对以下内容启用或者禁用:
- 整个应用程序:设置 web.config 文件中 部分的 EnableViewState 属性。
- 一个页面:设置页面指令的 EnableViewState 属性为 <%@ Page Language="C#" EnableViewState="false" %>
- 一个控件:设置控件 .EnableViewState 属性。
它通过使用视图状态对象,该对象是由被一组视图状态项目定义的 StateBag 类别定义的。该 StateBag 是一种数据结构,包含属性值对并被存储为与对象相关联的字符串。
StateBag 类具有以下属性:
StateBag 类具有以下方法:
实例
以下实例说明了存储视图状态的字符串的概念。
让我们保持一个计数器,通过点击页面上的一个按钮,该计数器能够在每次页面被调回时递增。标签控件显示计数器的值。
标记文件代码如下所示:
<%@ 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 识别和跟踪,从客户端传递到服务器并且作为 cookie 或修改的 URL 回传。SessionID 是全球唯一的,随机的。
会话状态对象由 HttpSessionState 类创建,它定义会话状态项集合。
HttpSessionState 类具有以下属性:
HttpSessionState 类有以下方法:
会话状态对象是一个名 - 值对,它可以从会话状态对象中存储和检索信息。同样地,您可以使用以下代码:
void StoreSessionInfo()
{
String fromuser = TextBox1.Text;
Session["fromuser"] = fromuser;
}
void RetrieveSessionInfo()
{
String fromuser = Session["fromuser"];
Label1.Text = fromuser;
}
以上代码只存储在会话词典对象中的字符串,但是,它可以存储所有原始数据类型和由原始数据类型组成的阵列,DataSet, DataTable, HashTable, 和图像对象,以及继承 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>
<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 类具有以下方法:
应用程序状态的数据通常是由为事件编写的处理程序维护:
- 应用程序开启
- 应用程序结束
- 应用程序错误
- 会话开始
- 会话结束
以下代码片段展示了用于存储应用程序状态信息的基本语法:
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.";
}