在这章中,我们研究页面生命周期以及页面如何包含各种控件。页面本身被实例化为一个控制对象。所有的web窗体基本上都是asp.net page
类的实例。 page
类具有以下对应于内部对象的非常有用的属性:
我们将在适当的时候讨论这些对象。在本教程中,我们将学习server
对象,request
对象和response
对象。
asp.net中的server
对象是system.web.httpserverutility
类的一个实例。 httpserverutility
类提供了许多执行各种作业的属性和方法。
服务器对象的属性和方法httpserverutility
类的方法和属性通过asp.net提供的内部服务器对象公开。
下表提供了属性的列表:
属性 | 描述 |
---|---|
machinename | 服务器计算机的名称 |
scripttimeout | 获取和设置请求超时值,以秒为单位。 |
下表列出了一些重要的方法:
编号 | 方法 | 描述 |
---|---|---|
1 | createobject(string) |
创建由其progid(编程id)标识的com对象的一个实例。 |
2 | createobject(type) |
创建由其类型标识的com对象的一个实例。 |
3 | equals(object) |
确定指定的对象(object )是否等于当前的对象。 |
4 | execute(string) |
在当前请求的上下文中执行指定虚拟路径的处理程序。 |
5 | execute(string, boolean) |
在当前请求的上下文中执行指定虚拟路径的处理程序,并指定是否清除querystring 和form 集合。 |
6 | getlasterror |
返回以前的异常。 |
7 | gettype |
获取当前实例的类型。 |
8 | htmlencode |
将普通字符串更改为具有合法html字符的字符串。 |
9 | htmldecode |
将html字符串转换为普通字符串。 |
10 | tostring |
返回表示当前对象的字符串。 |
11 | transfer(string) |
对于当前请求,终止当前页面的执行,并使用指定的页面url路径开始执行新页面。 |
12 | urldecode |
将url字符串转换为普通字符串。 |
13 | urlencodetoken |
与urlencode 相同,但是在包含base64编码数据的字节数组上。 |
14 | urldecodetoken |
与urldecode 相同,但在包含base64编码数据的字节数组上。 |
15 | mappath |
返回与服务器上指定的虚拟文件路径对应的物理路径。 |
16 | transfer |
将执行转移到当前应用程序中的另一个网页。 |
httprequest
对象是system.web.httprequest
类的一个实例。 它表示使页面加载到浏览器中的http请求的值和属性。
这个对象提供的信息被更高层次的抽象(web控制模型)所包围。 但是,此对象有助于检查某些信息,如客户端浏览器和cookie。
请求对象的属性和方法
下表提供了request
对象的一些值得注意的属性:
编号 | 属性 | 描述 |
---|---|---|
1 | accepttypes |
获取客户端支持的mime接受类型的字符串数组。 |
2 | applicationpath |
获取服务器上的asp.net应用程序的虚拟应用程序根路径。 |
3 | browser |
获取或设置有关请求客户端的浏览器功能的信息。 |
4 | contentencoding |
获取或设置实体主体的字符集。 |
5 | contentlength |
指定客户端发送的内容的长度(以字节为单位)。 |
6 | contenttype |
获取或设置传入请求的mime内容类型。 |
7 | cookies |
获取客户端发送的cookie的集合。 |
8 | filepath |
获取当前请求的虚拟路径。 |
9 | files |
获取客户端上传的文件的集合,采用多部分mime格式。 |
10 | form |
获取表单变量的集合。 |
11 | headers |
获取http标头的集合。 |
12 | httpmethod |
获取客户端使用的http数据传输方法(如get ,post 或head )。 |
13 | inputstream |
获取传入的http实体主体的内容。 |
14 | issecureconnection |
获取一个值,该值指示http连接是否使用安全套接字(即https)。 |
15 | querystring |
获取http查询字符串变量的集合。 |
16 | rawurl |
获取当前请求的原始url。 |
17 | requesttype |
获取或设置客户端使用的http数据传输方法(get 或post )。 |
18 | servervariables |
获取web服务器变量的集合。 |
19 | totalbytes |
获取当前输入流中的字节数。 |
20 | url |
获取有关当前请求的url的信息。 |
21 | urlreferrer |
获取有关链接到当前url的客户端先前请求的url的信息。 |
22 | useragent |
获取客户端浏览器的原始用户代理字符串。 |
23 | userhostaddress |
获取远程客户端的ip主机地址。 |
24 | userhostname |
获取远程客户端的dns名称。 |
25 | userlanguages |
获取客户端语言首选项的排序字符串数组。 |
下表列出了一些重要的方法:
编号 | 方法 | 描述 |
---|---|---|
1 | binaryread |
对当前输入流执行指定字节数的二进制读取。 |
2 | equals(object) |
确定指定的对象是否等于当前对象。 (从object继承。) |
3 | gettype |
获取当前实例的类型。 |
4 | mapimagecoordinates |
将传入的图像字段形式参数映射到适当的x 坐标和y 坐标值。 |
5 | mappath(string) |
将指定的虚拟路径映射到物理路径。 |
6 | saveas |
将http请求保存到磁盘。 |
7 | tostring |
返回表示当前对象的字符串。 |
8 | validateinput |
对通过cookies ,form 和querystring 属性访问的集合进行验证。 |
response对象表示服务器对客户端请求的响应。 它是system.web.httpresponse
类的一个实例。
在asp.net中,响应对象在向客户端发送html文本时不起任何重要作用,因为服务器端控件具有嵌套的,面向对象的方法来呈现自己。
但是,httpresponse
对象仍然提供了一些重要的功能,如cookie
功能和redirect()
方法。 response.redirect()
方法允许将用户转移到另一个页面。
response对象的属性和方法
下表提供了response
对象的一些值得注意的属性:
编号 | 属性 | 描述 |
---|---|---|
1 | buffer |
获取或设置一个值,指示是否缓冲输出并在完成响应完成处理后发送。 |
2 | bufferoutput |
获取或设置一个值,指示是否在完成页面处理完成后缓存输出并发送。 |
3 | charset |
获取或设置输出流的http字符集。 |
4 | contentencoding |
获取或设置输出流的http字符集。 |
5 | contenttype |
获取或设置输出流的http mime类型。 |
6 | cookies |
获取响应cookie集合。 |
7 | expires |
获取或设置在浏览器上缓存的页面到期之前的分钟数。 |
8 | expiresabsolute |
获取或设置从缓存中删除缓存信息的绝对日期和时间。 |
9 | headerencoding |
获取或设置一个编码对象,该对象表示当前标题输出流的编码。 |
10 | headers |
获取响应标头的集合。 |
11 | isclientconnected |
获取一个值,指示客户端是否仍连接到服务器。 |
12 | output |
启用将文本输出到传出的http响应流。 |
13 | outputstream |
启用二进制输出到传出http内容主体。 |
14 | redirectlocation |
获取或设置http location标头的值。 |
15 | status |
设置返回给客户端的状态行。 |
16 | statuscode |
获取或设置返回给客户端的输出的http状态码。 |
17 | statusdescription |
获取或设置返回给客户端的输出的http状态字符串。 |
18 | substatuscode |
获取或设置一个限定响应状态码的值。 |
19 | suppresscontent |
获取或设置一个值,指示是否向客户端发送http内容。 |
下表列出了一些重要的方法:
编号 | 方法 | 描述 |
---|---|---|
1 | addheader |
将http标头添加到输出流。提供addheader 是为了与早期版本的asp兼容。 |
2 | appendcookie |
基础架构将http cookie添加到内部cookie集合中。 |
3 | appendheader |
将http标头添加到输出流。 |
4 | appendtolog |
将自定义日志信息添加到internet信息服务(iis)日志文件。 |
5 | binarywrite |
将一串二进制字符写入http输出流。 |
6 | clearcontent |
清除缓冲流中的所有内容输出。 |
7 | close |
关闭与客户端的套接字连接。 |
8 | end |
将所有当前缓冲的输出发送到客户端,停止页面的执行,并引发endrequest 事件。 |
9 | equals(object) |
确定指定的对象(object )是否等于当前对象。 |
10 | flush |
将所有当前缓冲的输出发送到客户端。 |
11 | gettype |
获取当前实例的类型。 |
12 | pics |
将http pics-label标头附加到输出流。 |
13 | redirect(string) |
将请求重定向到新的url并指定新的url。 |
14 | redirect(string, boolean) |
将客户端重定向到新的url。指定新的url以及当前页面的执行是否应该终止。 |
15 | setcookie |
更新cookie 集合中的现有cookie。 |
16 | tostring |
返回表示当前对象的字符串。 |
17 | transmitfile(string) |
将指定的文件直接写入http响应输出流,而不将其缓冲在内存中。 |
18 | write(char) |
将一个字符写入http响应输出流。 |
19 | write(object) |
将对象写入http响应流。 |
20 | write(string) |
将一个字符串写入http响应输出流。 |
21 | writefile(string) |
将指定文件的内容直接写入http响应输出流作为文件块。 |
22 | writefile(string, boolean) |
将指定文件的内容直接写入http响应输出流作为内存块。 |
下面的简单例子有一个文本框控件,用户可以输入名字,一个按钮将信息发送到服务器,一个标签控件用于显示客户端的url。
打开visual studio,创建一个空的网站项目:serverside,参考下图 -
在项目名称上点击右键,并添加一个web窗体文件(defualt.aspx),参考下图 -
其内容如下:
<%@ page language="c#" autoeventwireup="true" codefile="default.aspx.cs" inherits="_default" %>
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>服务器端示例</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:label id="label1" runat="server" text="请输入姓名:"></asp:label>
<asp:textbox id="textbox1" runat="server"></asp:textbox>
<asp:button id="button1" runat="server" text="提交" onclick="button1_click" />
<br />
<br />
<asp:label id="label2" runat="server"></asp:label>
</div>
</form>
</body>
</html>
打开 default.cs,添加button1_click
事件处理的代码:
using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.ui;
using system.web.ui.webcontrols;
public partial class _default : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
}
protected void button1_click(object sender, eventargs e)
{
if (!string.isnullorempty(textbox1.text))
{
// access the httpserverutility methods through
// the intrinsic server object.
label1.text = "欢迎您, " + server.htmlencode(textbox1.text) + ". <br/> 当前 url 是 " + server.urlencode(request.url.tostring());
}
}
}
运行该项目(页面),得到类似以下结果:
输入一个名字:h3,然后提交,得到以下结果 -