当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > Asp.net 页面导航的几种方法与比较

ASP.NET
FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法
.NET 常用功能和代码小结
在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出
asp.net IList查询数据后格式化数据再绑定控件
asp.net sql存储过程
asp.net 简单实现禁用或启用页面中的某一类型的控件
asp.net(c#)获取内容第一张图片地址的函数
The remote procedure call failed and did not execute的解决办法
ASP.NET 在线文件管理
asp.net 读取并修改config文件实现代码
ASP.NET Cookie 操作实现
asp.net Silverlight中的模式窗体
Silverlight中动态获取Web Service地址
asp.net Silverlight应用程序中获取载体aspx页面参数
asp.net 水晶报表隔行换色实现方法
asp.net 获取Gridview隐藏列的值
手动把asp.net的类生成dll文件的方法
asp.net 使用ObjectDataSource控件在ASP.NET中实现Ajax真分页
动态指定任意类型的ObjectDataSource对象的查询参数
asp.net Md5的用法小结

ASP.NET 中的 Asp.net 页面导航的几种方法与比较


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 41 ::
收藏到网摘: n/a

    在ASP.NET应用中,Web表单之间的导航有多种方式:用超级链接,用Response.Redirect,用Server.Transfer,或者用Server.Execute。本文将分析这四种导航方式的异同及其优缺点,帮助你选择最佳的导航方式。

一、超级链接

  从一个表单进入另一个表单最简单的方式是使用HTML超级链接控件。在Web表单中,使用超级链接的HTML代码类如:

<a href="WebForm2.aspx">进入表单2</a>

 

  当用户点击该超级链接,WebForm2.aspx执行并将结果发送到浏览器。超级链接导航方式几乎可用于任何地方,包括HTML页面和普通的ASP页面。ASP.NET还提供了另一种可替换使用的方法,即HyperLink服务器控件:

<form id="Form1" method="post" runat="server">
<asp:HyperLink id="HyperLink1" runat="server"
NavigateUrl="WebForm2.aspx">进入表单2</asp:HyperLink>
</form>

 

  上述HTML代码的运行结果和第一个例子相同,因为ASP.NET把HyperLink Web服务器控件视为一个HTML超级链接控件。但两者有一点重要的区别,HyperLink Web服务器控件可以在服务器端编程。具体地说,可以在程序代码中改变它的NavigateUrl属性,从而允许构造出具体目标可根据应用的当前状态动态变化的超级链接,例如:

Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
HyperLink1.NavigateUrl = "WebForm3.aspx"
End Sub

 

  这段代码执行后,如果用户点击链接,他看到的将是WebForm3.aspx,而不是WebForm2.aspx。

二、用程序控制重定向

  虽然超级链接能够从一个页面导航到另一个页面,但这种导航方式是完全由用户控制的。有些时候,我们可能要用代码来控制整个导航过程,包括何时转到另一个页面。在这些场合,ASP.NET有三种不同的方式可以达到相似的目的:调用Response对象的Redirect方法,调用Server对象的Transfer或Execute方法。这三种导航方式的行为基本相似,但也有区别。

  2.1 Response.Redirect

  Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。

  这就是说,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。

  2.2 Server.Transfer

  Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。

  如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。

  默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。

  同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。

  2.3 Server.Execute

  Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。

  这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。

  默认情况下,被调用页面的输出追加到当前应答流。但是,Server.Execute方法有一个重载的方法,允许通过一个TextWriter对象(或者它的子对象,例如StringWriter对象)获取被调用页面的输出,而不是直接追加到输出流,这样,在原始页面中可以方便地调整被调用页面输出结果的位置。

  为说明其工作过程,下面我们创建一个Web表单,放入一个按钮控件(Button1)和一个文本控件(Literal1),在设计界面中转入代码视图,加入一个System.IO名称空间的Imports语句,然后加入用户点击按钮时执行的代码:

Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.Event