网站基础
页面
.aspx文件称为内容文件,包括页面的可视化内容以及ASP.NET服务器控件
代码隐藏文件包含服务器端代码块
当浏览器请求Web服务器中的.aspx文件时
如果是第一次访问,将编译此页Page类,并被服务器缓存
在2.0允许在部署前对Web站点进行编译
编译类的名字来自.aspx的文件名
如果是默认页default.aspx,那么类名是_default
其他页的类名是此页文件名去掉扩展名
对于使用ASP.NET运行时进行处理的.aspx文件,必须把页指令置于文件第一行
Page类从Control类派生而来
常用页面类属性
名称 说明
Application 为当前 Web 请求获取 HttpApplicationState 对象
Cache 获取应用程序的 Cache 对象
ClientQueryString 获取请求的 URL 的查询字符串部分
Controls 获取对页面上Controls集合的引用
ErrorPage 在发生未处理的页异常的事件时请求浏览器将被重定向到该页
IsCrossPagePostBack 指示跨页回发中是否涉及该页
IsPostBack 是否为响应客户端回发而加载,或者是否正被首次加载和访问
IsValid 页验证是否成功
MaintainScrollPositionOnPostBack 回发后是否将用户返回到客户端浏览器中的同一位置
Master 获取确定页的整体外观的母版页
MasterPageFile 获取或设置母版页的文件名
PreviousPage 取得对前一页面的引用
代码隐藏
在一个文件中混排HTML,文本,控件和程序代码的方式叫单文件模式
这个单文件需要一个页面指令,而且任何被编译的服务器端代码都需要包含在<script>标签内
为了将表示代码与逻辑代码进行分离,可以将程序逻辑写入代码隐藏文件中
其他内容文件类型
类型 扩展名
网页 .aspx
用户控件 .ascx
Web服务 .asmx
母版页 .master
内容文件创建的类名称,由页面指令中的Inherits属性指定,默认为内容文件的原始名称,内容文件的代码隐藏文件名由CodeFile属性指定
在代码隐藏文件中,声明了一个继承自System.Web.UI.Page的partial(局部)类
public partial class _Default : System.Web.UI.Page
局部类允许将单个类的定义分开储存到多个源文件中
转到另一个页面
共有四种方法:超链接,服务器传输,浏览器重定向和跨页面发送
超链接(Hyperlink)
Hyperlink控件会直接转到其NavigateUrl属性值所指向的页面
服务器传输(Server.Transfer)
HttpServerUtility类的Transfer方法可以终止当前页的执行,并为当前请求开始执行新页
当重定向到新页面之后,浏览器地址栏会显示原来页面的URL地址
Server.Transfer有一个包含Boolean值的重载方法,表示是否保留原来页的 QueryString 和 Form 集合,默认是false
注意:使用Server.Transfer跳转后视图状态将会失效
浏览器重定向(Response.Redirect)
HttpResponse类的Redirect方法相当于一个可编程的Hyperlink
该方法将.aspx或.htm页面的URL地址作为字符串参数,在客户端执行重定向
Redirect响应速度比Transfer快,而且会强制验证和授权
Response.Redirect有一个包含Boolean值的重载方法,表示是否终止当前执行
跨页发送(Cross-Page Posting)
页面可以被提交到服务器,然后直接发送到另一个页面,而且只能是.aspx页面
通过特定控件的PostBackUrl属性实现
前页的控件可以通过Page.PreviousPage属性访问
状态
ASP.NET包括四种状态类型:视图状态,控件状态,应用程序状态和会话状态
会话状态
特性:
在禁用cookies浏览器中工作运行
对于已经存在的会话请求进行辨识
存储会话范围内的数据在多请求中使用
激发会话事件,如Session_Start和Session_End
如果会话结束或超时将自动释放会话资源
默认情况下,会话状态存储在服务器内存中
通过配置可以存储在单独的服务器或数据库中
利用SessionID可表示和跟踪会话
SessionID是全局唯一的,随机的
会话状态通过HttpSessionState类的内容集合属性实现
该集合是一个关键值字典,可以存储任何实现ISerializable接口的对象
使用:
Session["code"] = "ab";
string[] a = new string[2];
Books[0] = "a";
Books[1] = "b";
Session["books"] = Books;
string s = (string)Session["code"]
string[] b = (string[])Session["books"];
会话状态配置
页面会话状态配置由顶部Page指令控制
应用程序范围内的会话状态由web.config配置文件控制
例如:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableSessionState="True" %>
其中EnableSessionState定义页的会话状态要求。
如果启用了会话状态,则为 true;如果可以读取会话状态但不能进行更改,则为 ReadOnly;否则为 false。默认值为 true。这些值是不区分大小写的。
通过设置web.config中system.web配置节的sessionState配置节配置会话状态
属性 说明
allowCustomSqlDatabase 指定会话状态 SQL 数据库是否可以是自定义数据库
cookieless 指定对于Web应用程序使用Cookie的方式,默认值为UseCookies
cookieName 指定存储会话标识符的Cookie的名称,默认值为 "ASP.NET_SessionId"
customProvider 自定义会话状态提供者的名称
mode 指定存储会话状态值的位置
regenerateExpiredSessionId 指定当客户端指定了过期的会话 ID 时是否重新发出会话 ID
sqlCommandTimeout 指定使用 SQL Server 会话状态模式的 SQL 命令的持续时间超时
sqlConnectionString 为运行 SQL Server 的计算机指定连接字符串
stateConnectionString 指定远程存储会话状态的服务器名称或地址以及端口
stateNetworkTimeout 指定 Web 服务器与状态服务器之间的 TCP/IP 网络连接可以处于空闲状态的时间
timeout 指定在放弃一个会话前该会话可以处于空闲状态的分钟数
useHostingIdentity ASP.NET进程表示是否会被模拟
cookieless属性包括的值
值 说明
AutoDetect 确定请求浏览器或请求设备是否支持 Cookie
UseCookies 无论浏览器或设备是否支持 Cookie,都使用 Cookie
UseDeviceProfile根据HttpBrowserCapabilities设置来确定是否使用Cookie
UseUri 使用查询字符串来存储标识符。
mode属性包括的值
值 说明
Custom 会话状态将使用自定义数据存储区来存储会话状态信息
InProc 会话处于正在处理 ASP.NET 辅助进程的状态
Off 会话状态被禁用
SQLServer 会话状态将使用进程外 SQL Server 数据库来存储状态信息
StateServer 会话状态将使用进程外 ASP.NET 状态服务来存储状态信息
会话中的应用程序对象
另一个在会话之间传递信息的方法是通过静态对象
静态对象在global.asax文件中声明
如果声明对象的scope属性被设置为Session,就可以在代码中通过名称在会话内访问对象
视图状态
视图状态是指页面及其所有控件的状态
存储在页面一个隐藏字段的状态包中
如果不需要视图状态,可以禁用视图状态来提高性能
方法:
1 在Page指令将EnableViewState属性设为false
2 在Web.config的pages配置节的enableViewState属性设为false
3 在machine.config中做同样配置
4 通过设置控件的EnableViewState属性配置
状态包
如果值没有和控件关联,而交互中需要这些值,可以把这些值保存在页面状态包中
状态包使用与视图状态同样的隐藏字段来维持
通过ViewState关键字设置和获取状态包中内容的值
例如:
ViewState["count"] = 5;
int i = (int)ViewState["count"]
应用程序状态
global.asax文件包含web应用程序的全局代码
它包括Application_Start,Application_End,Application_Error,Session_Start和Session_End事件的处理程序
利用字典对象可以实现信息在应用程序范围内的全局共享
例如:
Application["str"] = "abc";
string a = (string)Application["str"];
注意:
并发和应用程序锁定
为解决并发的问题,使用HttpApplicationState类的Lock和UnLock方法控制对应用程序状态对象的访问
规模
在锁定应用程序状态同时,应注意同时请求数量的不断增加
存储器
每个应用字典对象都占用存储器
持久性和生存能力
在应用程序状态结束时,对应用程序状态的保存等措施
扩展至Web场和Web园
运行在多服务器和多处理器服务器上的情况
生命周期
每个请求都由Web服务器执行一系列步骤,这些步骤从开始到结束构成页面周期
指令
指令用于将选择设置传送给ASP.NET页面和编译器
格式:
<%@ directive attribute=value [attribute=value] %>
Application 指令
用于定义应用程序方面的属性,通常位于global.asax文件的第一行
例如:
<%@ Application Language="C#" %>
Application指令属性
属性 说明
Inherits 应用程序类继承的类名称
Description 应用程序类的文本说明
Language 指定代码所使用的语言
Assembly 指令
指令在编译期间将程序集链接到 ASP.NET 应用程序页
Assembly指令属性
属性 说明
Name 表示要链接的程序集的名称
Src 要动态编译和链接的源文件的路径
Control 指令
该指令包含在用户控件(.ascx)文件内,且每个文件只能有一个
Control指令属性
属性 说明
AutoEventWireup 指示控件的事件是否自动匹配
ClassName 用于指定需在请求时进行动态编译的控件的类名
Debug 指示是否应使用调试符号编译控件
Description 提供控件的文本说明
EnableViewState 指示是否跨控件请求维护视图状态
Explicit 如果使用VB,指示是否应使用Option Explicit模式来编译控件
Inherits 定义供控件继承的代码隐藏类
Language 指定代码所使用的语言
Src 指定包含链接到控件的代码的源文件的路径
Strict 如果使用VB,指示是否应使用Option Strict模式来编译控件
Implements 指令
指示页或用户控件实现指定的 .NET Framework 接口
Import 指令
将命名空间显式导入页或用户控件中
Master 指令
将一个页面表示为母版页
MasterType 指令
为页面的Master属性分配类名,使得该页可以获取对母版页成员的强类型引用
OutputCache 指令
以声明的方式控制页或用户控件的输出缓存策略
Page 指令
定义页面分析器和编译器使用的特定于页的属性。只能包含在 .aspx 文件中
常见Page指令属性
属性 说明
AutoEventWireup 指示页的事件是否自动绑定
Buffer 确定是否启用了 HTTP 响应缓冲
ClassName 指定在请求页时将自动进行动态编译的页的类名
ClientTarget 指示服务器控件应该为其呈现内容的目标用户代理
CodeFile 指定指向页引用的代码隐藏文件的路径
Debug 指示是否应使用调试符号编译该页
Description 提供该页的文本说明
EnableSessionState 定义页的会话状态要求
EnableViewState 指示是否在页请求之间保持视图状态
ErrorPage 定义在出现未处理页异常时用于重定向的目标 URL
Inherits 定义供页继承的代码隐藏类
Language 内联代码所使用的编程语言
SmartNavigation 指示页是否支持智能导航功能
Src 指定包含链接到页的代码的源文件的路径
Trace 指示是否启用跟踪
TraceMode 指示当启用跟踪时如何为页显示跟踪消息
Transaction 指示在页上是否支持事务
ValidateRequest 指示是否应发生请求验证
Reference 指令
以声明的方式将页或用户控件链接到当前页或用户控件
Register 指令
将别名与命名空间及类名关联起来,从而允许用户控件和自定义服务器控件在被包括到请求的页或用户控件时呈现