2.1 Response对象
2.1.1 Response对象概述
Response对象用于将数据从服务器发送回浏览器。它允许将数据作为请求的结果发送到浏览器中,并提供有关响应的信息;还可以用来在页面中输入数据、在页面中跳转,并传递各个页面的参数。它与HTTP协议的响应消息相对应。
假如将用户请求服务器的过程比喻成客户到柜台买商品的过程,那么在客户描述要购买的商品(如功能、大小、颜色等)后,销售员就会将商品摆在客户的面前,这就相当于Response对象将数据从服务器发送回浏览器。
2.1.2 Response对象的常用属性和方法
Response对象将HTTP响应数据发送到客户端,并包含有关该响应的信息,其常用属性、方法及说明如表2.1和表2.2所示。
表2.1 Response对象的常用属性及说明
表2.2 Response对象的常用方法及说明
2.1.3 在页面中输出数据
Response对象通过Write方法或WriteFile方法在页面上输出数据。输出的对象可以是字符、字符数组、字符串、对象或文件。
【例2.1】在页面中输出数据(示例位置:光盘\TM\sl\02\01)
本示例主要是使用Write方法和WriteFile方法实现在页面上输出数据。在运行程序之前,在F盘上新建一个WriteFile.txt文件,文件内容为“Hello World! ! ! Hello World! ! ! Hello World! ! ! Hello World! ! ! ”。执行程序,示例运行结果如图2.1所示。
图2.1 在页面输出数据
程序实现的主要步骤如下。
新建一个网站,默认主页为Default.aspx。在Default.aspx的Page_Load事件中先定义4个变量,分别为字符型变量、字符串变量、字符数组变量和Page对象,然后将定义的数据在页面上输出。代码如下:
char c='a'; //定义一个字符变量 string s="Hello World! "; //定义一个字符串变量 char[] cArray={'H','e','l','l','o',', ','','w','o','r','l','d'}; //定义一个字符数组 Page p=new Page(); //定义一个Page对象 Response.Write("输出单个字符"); Response.Write(c); Response.Write("<br>"); Response.Write("输出一个字符串"+s+"<br>"); Response.Write("输出字符数组"); Response.Write(cArray, 0, cArray.Length); Response.Write("<br>"); Response.Write("输出一个对象"); Response.Write(p); Response.Write("<br>"); Response.Write("输出一个文件"); Response.WriteFile(@"F:\WriteFile.txt");
注意
应用WriteFile方法输出一个文件时,该文件必须是已经存在的。如果不存在,将产生“未能找到文件”异常。
2.1.4 页面跳转并传递参数
Response对象的Redirect方法可以实现页面重定向的功能,并且在重定向到新的URL时可以传递参数。
例如,将页面重定向到welcome.aspx页的代码如下:
Response. Redirect ("~/welcome.aspx");
在页面重定向URL时传递参数,使用“? ”分隔页面的链接地址和参数,有多个参数时,参数与参数之间使用“&”分隔。
例如,将页面重定向到welcome.aspx页并传递参数的代码如下:
Response.Redirect("~/welcome.aspx? parameter=one "); Response.Redirect("~/welcome.aspx? parameter1=one¶meter2=other");
【例2.2】页面跳转并传递参数。(示例位置:TM\sl\02\02)
本示例主要通过Response对象的Redirect方法实现页面跳转并传递参数。执行程序,在TextBox文本框中输入姓名并选择性别,单击“确定”按钮,跳转到welcome.aspx页,示例运行结果如图2.2和图2.3所示。
图2.2 页面跳转传递参数
图2.3 重定向的新页
程序实现的主要步骤如下。
(1)新建一个网站,默认主页为Default.aspx,在Default.aspx页面上添加1个TextBox控件、1个Button控件和2个RadioButton控件,它们的属性设置及用途如表2.3所示。
表2.3 Default.aspx页面中控件的属性设置及用途
在“确定”按钮的btnOK_Click事件中实现跳转到页面welcome.aspx并传递参数Name和Sex,代码如下:
protected void btnOK_Click(object sender, EventArgs e) { string name=this.txtName.Text; string sex="先生"; if(rbtnSex2 .Checked) sex="女士"; Response.Redirect("~/welcome.aspx?Name="+name+"&Sex="+sex); }
注意
通过URL地址传递多个参数时,应使用“&”符号作为多个参数之间的连接符。
(2)在该网站中添加一个新页,将其命名为welcome.aspx。在页面welcome.aspx的初始化事件中获取Response对象传递过来的参数,并将其输出在页面上。代码如下:
protected void Page_Load(object sender, EventArgs e) { string name = Request.Params["Name"]; string sex = Request.Params["Sex"]; Response.Write("欢迎"+name+sex+"! "); }
2.1.5 输出二进制图像
Response对象不但可以使用Write方法在页面上输出数据、使用WriteFile方法将文件内容在页面上输出,而且还可以使用BinaryWrite方法显示二进制表示的数据,如图像、图片等。
【例2.3】输出二进制图像。(示例位置:TM\sl\02\03)
本示例主要通过Response对象的BinaryWrite方法实现输出二进制图像。执行程序,示例运行结果如图2.4所示。
图2.4 输出二进制图像
程序实现的主要步骤如下。
新建一个网站,默认主页为Default.aspx。首先引入System.IO命名空间,然后在Default.aspx页面初始化事件中将图片文件读取到文件流中,并将图像以二进制数据的形式输出到页面。代码如下:
using System.IO; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //打开图片文件,并保存在文件流中 FileStream stream = new FileStream(Server.MapPath("picture.gif"), FileMode.Open); long FileSize=stream.Length; //获取流的长度 byte[] Buffer=new byte[(int)FileSize]; //定义一个二进制数组 stream.Read(Buffer, 0, (int)FileSize); //从流中读取字节块并将该数据写入给定缓冲区中 stream.Close(); //关闭流 Response.BinaryWrite(Buffer); //将图片输出在页面上 } }
技巧
Response对象的Write方法与JavaScript脚本语言结合使用。
(1)弹出提示对话框
Response.Write方法主要用来在页面上输出信息。该方法还可以结合JavaScript脚本语言,弹出提示对话框。代码如下:
Response.Write("<script>alert('Hello World! ')</script>");
(2)关闭窗口
在ASP.NET中没有提供直接关闭窗口的方法,但是可以使用JavaScript脚本关闭窗口。代码如下:
Response.Write("<script>window.close(); </script>");