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

4.4 Server对象

Server对象也是Page对象的成员之一,主要提供一些处理网页请求时所需的功能,例如建立COM对象、将字符串进行编码和解码等工作。

4.4.1 Server对象的属性

Server对象提供对服务器上的方法和属性的访问,它是HttpServerUtility类的实例。Server对象提供两个属性,说明如下。

(1)MachineName属性:获取服务器的计算机名称。

(2)ScriptTimeout属性:获取和设置请求超时(以秒计)的时间。

例如,在窗体页面上添加Label控件,该控件显示计算机名称和请求超时的时间。Load事件中的代码如下。

        protected void Page_Load(object sender, EventArgs e) {
            lblResult.Text = "计算机名称:" + Server.MachineName + "<br/>获取超时的
            时间:" + Server.ScriptTimeout;
        }

4.4.2 Server对象的方法

与Server对象的属性相比,它的方法要多一些,常用方法如表4-8所示。

表4-8 Server对象的常用方法

虽然表4-8中列出了Server对象的多个方法,但是下面只对该对象的常用方法进行介绍。

1.MapPath()方法

Server对象的MapPath()方法返回与Web服务器上的指定虚拟路径相对应的物理文件路径。使用该方法时需要传入一个string类型的参数,该参数是虚拟路径(即相对路径),返回传入的相对路径的绝对路径。如果传入参数的值是null,则返回应用程序所在的目录的物理路径。

【范例11】

页面加载时指定ID属性值为lblResult的Label控件的Text属性值,代码如下。

        protected void Page_Load(object sender, EventArgs e){
            lblResult.Text = "相对地址:" + Server.MapPath("images")+"<br/>"
              + "指定~符号:" + Server.MapPath("~/images")+"<br/>"
              + "传入null:" + Server.MapPath(null);
        }

运行窗体页面查看效果,如图4-12所示。

图4-12 MapPath()方法的使用

2.Transfer()和Execute()方法

实现从一个页面A.aspx跳转到另一个页面B.aspx,常用的有以下5种方法。

(1)通过Response对象的Redirect()方法实现。

(2)通过Response对象的Write()方法实现,在该方法中通过脚本跳转页面。

(3)通过Button控件、ImageButton控件和LinkButton控件的PostBackUrl属性实现。

(4)通过Server对象的Transfer()方法实现。

(5)通过Server对象的Execute()方法实现。

通过前面的三种方式实现页面跳转时,地址栏中的页面都会发生改变。例如,范例9通过PostBackUrl属性实现跳转,当单击页面中的【登录】按钮时会提交到MessageDefault.aspx页面,并且地址栏中的页面发生改变。但是,使用Server对象的Transfer()方法实现跳转时,地址栏中的页面不会发生改变。

【范例12】

下面演示Server对象的Transfer()方法的使用。

(1)创建Transfer.aspx窗体页面,并在该页面中添加一个Button控件。页面代码如下。

        <asp:Button ID="btn1" runat="server" Text="Transfer()" OnClick=
        "btn1_Click" />

(2)在后台页面的Load事件中添加如下代码。

        protected void btn1_Click(object sender, EventArgs e) {
          Server.Transfer("Default.aspx");
      }

(3)创建Default.aspx页面,该页面的HTML文档中只包含一段文本,内容是“这是一个简单的ASP.NET网页。”。

(4)运行窗体页面查看效果,如图4-13所示。单击图中的按钮进行测试,如图4-14所示。比较图4-13和图4-14可以发现,虽然实现页面跳转,但是地址栏并没有发生改变。

图4-13 页面初始效果

图4-14 实现页面跳转

通过Server对象的Execute()方法也可以实现从A.aspx页面到B.aspx页面的跳转,但是不同的是,执行完B.aspx页面之后会重新返回到A.aspx页面继续执行。

【范例13】

在范例12的基础上添加新的内容,步骤如下。

(1)在创建Transfer.aspx窗体页面中添加文本值为“Execute()”的Button控件,并指定控件的Click事件。

(2)为上述添加的Button控件添加Click事件代码,调用Execute()方法实现跳转。

(3)运行窗体页面查看效果,如图4-15所示。单击Execute()按钮进行测试,如图4-16所示。

图4-15 页面初始效果

图4-16 实现跳转效果

3.HtmlEncode()和HtmlDecode()方法

HtmlEncode()方法对字符串进行编码;HtmlDecode()方法对字符串进行解码。HtmlEncode()和HtmlDecode()方法都有两种构造函数,以HtmlEncode()方法为例,形式如下。

        string HtmlEncode(string s)
        void HtmlEncode(string s, TextWriter output)

其中,第一种形式的构造函数表示对字符串进行HTML编码并返回已编码的字符串,参数s是要编码的字符串。第二种形式的构造函数表示对字符串进行HTML编码,并将结果输出发送到文本输出流,参数s表示要编码的字符串,output表示TextWriter类的文本输出流。

【范例14】

下面演示HtmlEncode()和HtmlDecode()方法的使用。

(1)创建BJDefault.aspx页面,并在页面中添加两个TextBox控件和两个Button控件,代码如下。

        <asp:TextBox ID="txtSource" runat="server" TextMode="MultiLine"
        Columns="50" Rows="5"></asp:TextBox><br /><br />
        <asp:Button ID="btnEncode" runat="server" Text="编 码" OnClick=
        "btnEncode_Click" />&nbsp;
        <asp:Button ID="btnDecode" runat="server" Text="解 码" OnClick=
        "btnDecode_Click" /><br /><br />
        <asp:TextBox ID="txtTarget" runat="server" TextMode="MultiLine"
        Columns="50" Rows="5"></asp:TextBox>

(2)在BJDefault.aspx.cs页面添加Button控件的Click事件代码,以【编码】按钮的事件代码为例,内容如下。

        protected void btnEncode_Click(object sender, EventArgs e) {
            txtTarget.Text = "编码后的内容:"+Server.HtmlEncode(txtSource.Text);
        }

(3)运行窗体页面查看效果,如图4-17所示。输入内容后单击【编码】按钮,如图4-18所示。

图4-17 初始运行效果

图4-18 内容编码效果

(4)重新输入内容后单击【解码】按钮进行测试,效果图不再显示。