清华电脑学堂:ASP.NET 4.5网站开发与应用实践教程
上QQ阅读APP看书,第一时间看更新

4.2 Response对象

页面跳转与数据传递是ASP.NET中页面最常执行的操作,页面跳转是指从一个页面跳转到另一个页面。要实现跳转,可以用ASP.NET的Response对象。

Response对象提供对当前页面的输出流的访问,这里的输出流是指用户作为对其请求的响应而收到的信息集合。

4.2.1 Response对象的属性

Response对象主要可用于:将文本写入到输出页面;读取/写入Cookie;将用户从请求页面重新定向到另一页面;结束基于某些条件的应用程序连接;检查客户端是否依然与服务器相连等功能。

实际上,Response对象是HttpResponse类的一个对象,与一个HTTP响应相对应,通过该对象的属性和方法可以控制如何将服务器端的数据发送到客户端浏览器。如表4-3所示列出了Response对象的常用属性,并对这些属性进行说明。

表4-3 Response对象的常用属性

通过Response的ContentType属性设置页面的内容类型为JPEG文件,并且将BufferOutput属性的值设置为true,表示缓冲响应,以便发送页面,代码如下。

        Response.ContentType = "image/jpeg";
        Response.BufferOutput = true;

4.2.2 Response对象的方法

Response对象可以输出信息到客户端,包括直接发送消息给浏览器、重定向浏览器到另一个URL或设置Cookie的值。ASP.NET中引用对象方法的语法是“对象名.方法名”。Response对象提供了多个方法,常用方法如表4-4所示。

表4-4 Response对象的常用方法

1.Write()方法

Write()方法将信息写入HTTP响应输出流。Write()方法有以下4种构造函数。

        void HttpResponse.Write(char ch)
        void HttpResponse.Write(object obj)
        void HttpResponse.Write(string s)
        void HttpResponse.Write(char[] buffer, int index, int count)

其中,第一种构造函数表示将一个字符写入HTTP响应输出流,ch表示要写入HTTP输出流的字符。第二种构造函数表示将System.Object写入HTTP响应流,obj表示要写入HTTP输出流的System.Object。第三种构造函数表示将一个字符串写入HTTP响应输出流,s表示要写入HTTP输出流的字符串。最后一种构造函数表示将一个字符数组写入HTTP响应输出流,buffer表示要写入的字符数组。

【范例4】

通常情况下,开发者会使用Write()方法向页面输出一段脚本或者一段文本内容。如在Web窗体中设计用户登录页面,包含一个用户输入框、一个密码框、一个按钮和两个必填验证控件,并为按钮添加Click事件。Click事件代码如下。

        protected void Button1_Click(object sender, EventArgs e) {
            string content = "您输入的用户名是:" + txtName.Text + ",您输入的密码是:
            " + txtPass.Text;
            Response.Write(content);
        }

运行窗体页面查看初始效果,如图4-6所示。输入内容后单击Button按钮测试,如图4-7所示。

图4-6 初始效果

图4-7 输出文本

通过Write()方法输出脚本的实现也很简单,直接将脚本作为参数传递到Write()方法中即可,如范例5所示。

【范例5】

更改范例4的代码,通过Write()方法弹出范例4输出的文本,代码如下。

        protected void Button1_Click(object sender, EventArgs e) {
            string content = "您输入的用户名是:" + txtName.Text + ",您输入的密码是:
            " + txtPass.Text;
            Response.Write("<script>alert('"+content+"')</script>");
        }

运行窗体页面,输入内容后单击Button按钮测试,如图4-8所示。

图4-8 Write()方法输出脚本

2.WriteFile()方法

Response对象提供了一个直接输出文本文件的WriteFile()方法。如果要输出的文件和执行的网页在同一个目录,只要直接传入文件名称即可;如果不在同一个目录,则要指定详细的目录名称。

【范例6】

页面加载时直接调用Response对象的WriteFile()方法输出Test.txt文本文件中的内容,代码如下。

        protected void Page_Load(object sender, EventArgs e) {
            Response.WriteFile("Test.txt");
        }

3.Redirect()方法

Response对象的Redirect()方法将客户端浏览器重定向到另外的URL上,即跳转到另一个网页。Redirect()方法的两种常用构造函数如下。

        void HttpResponse.Redirect(string url)
        void HttpResponse.Redirect(string url, bool endResponse)

上述两种构造函数都表示跳转到指定的URL。其中,第一种方式需要传入一个参数,用URL指定路径,使请求自动跳转到指定的URL地址。第二种方式需要传入两个参数,用URL指定路径,并指定一个布尔值指示当前响应是否结束。

【范例7】

在Button控件的Click事件中添加代码,获取用户在页面中输入的用户名和密码,如果用户名和密码都是admin,则跳转到LoginSuccess.aspx页面,否则跳转到LoginFail.aspx页面,代码如下。

        protected void Button1_Click(object sender, EventArgs e) {
            if (txtName.Text == "admin" && txtPass.Text == "admin") {
              Response.Redirect("LoginSuccess.aspx");
            } else {
                Response.Redirect("LoginFail.aspx");
            }
        }

在用Redirect()方法实现页面跳转时,可以通过问号(?)向页面中传递参数。如向LoginSuccess.aspx页面中传入name和pass两个参数,代码如下。

        Response.Redirect("LoginSuccess.aspx? name="+txtName.Text+"&&pass="+txt
        Pass.Text);