`

ASP.NET四种页面导航方式的比较与选择

阅读更多

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.EventArgs) Handles Button1.Click
 Dim sw As StringWriter = New StringWriter()
 Server.Execute("WebForm2.aspx", sw)
 Literal1.Text = sw.ToString()
End Sub


  然后为同一个Web应用创建第二个页面WebForm2.aspx。转入该页面的HTML视图,修改其Page指令禁止ViewState检查:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"
Inherits="Navigate.WebForm2" EnableViewStateMac="false"%>


  再转到设计视图,为第二个页面增加一些控件。接下来,把第一个页面设置成默认页面,启动应用。点击按钮,WebForm2的控件将显示在WebForm1中放置Literal按钮的地方,如图一,注意页面标题和URL仍旧显示原始页面WebForm1。


图一:用Server.Execute合并两个源文件的页面

 
  用Server.Transfer或Server.Execute方法实现导航时,还要注意一点:最后得到的页面可能不是合法的HTML页面,因为最终返回给客户端的页面可能包含多个<HTML>和<BODY>等标记。IE浏览器看来能够容忍并正确处理这类情形,但如果用户要用到其他的浏览器,最好仔细测试一下。

  三、比较与选择

  既然从一个页面导航到另一个页面的办法有这么多,应该如何选择最佳的导航方式呢?下面是一些需要考虑的因素:

  ·如果要让用户来决定何时转换页面以及转到哪一个页面,超级链接最适合。

  ·如果要用程序来控制转换的目标,但转换的时机由用户决定,使用Web服务器的HyperLink控件,动态设置其NavigateUrl属性。

  ·如果要把用户连接到另一台服务器上的资源,使用Response.Redirect。

  ·用Response.Redirect把用户连接到非ASPX的资源,例如HTML页面。

  ·如果要将查询字符串作为URL的一部分保留,使用Response.Redirect。

  ·如果要将执行流程转入同一Web服务器的另一个ASPX页面,应当使用Server.Transfer而不是Response.Redirect,因为Server.Transfer能够避免不必要的网络通信,从而获得更好的性能和浏览效果。

  ·如果要捕获一个ASPX页面的输出结果,然后将结果插入另一个ASPX页面的特定位置,则使用Server.Execute。

  ·如果要确保HTML输出合法,请使用Response.Redirect,不要使用Server.Transfer或Server.Execute方法。

分享到:
评论

相关推荐

    ASP.NET四种页面导航方式之比较与选择

    本文将深入探讨四种主要的页面导航方式:超级链接、Response.Redirect、Server.Transfer和Server.Execute,分析它们的特点、优缺点以及适用场景。 一、超级链接 超级链接是最直观、最基础的页面导航方式。HTML中的`...

    ASP.NET中的四种导航方式

    ### ASP.NET中的四种导航方式 在ASP.NET框架中,实现页面间的导航是非常常见的需求之一,这对于构建用户友好且逻辑清晰的应用程序至关重要。本文将详细介绍ASP.NET中常用的四种导航方式:HTML超链接、`Response....

    asp.net的主题及导航模板

    - ASP.NET页面:实际的Web应用程序页面,可能使用了导航控件和主题。 - RESX文件:包含不同语言的字符串资源。 - web.config:配置文件,其中可能包含了主题和本地化设置。 5. 应用与实践: 开发者可以从这个...

    Asp.net 左侧导航

    1. **ASP.NET MVC与Web Forms**: ASP.NET提供了两种主要的开发模型:MVC(Model-View-Controller)和Web Forms。这里没有明确指出使用的是哪一种,但左侧导航的概念在两者中都是通用的。在MVC中,导航通常通过视图...

    ASP.net系统模板页面

    6. **页面生命周期(Page Lifecycle)**:理解ASP.NET页面的生命周期对于调试和优化性能至关重要,包括初始化、加载、验证、呈现和卸载等阶段。 7. **安全性(Security)**:ASP.NET提供了多种安全特性,如身份验证...

    asp.net数据库项目案例导航

    3. **Web Forms和MVC模式**:了解两种主要的开发模型——Web Forms和ASP.NET MVC,它们各自的特点和适用场景,以及如何选择合适的开发模式。 4. **数据库交互**:数据库是许多Web应用的核心部分,本案例会讲解如何...

    ASP.NET 导航控件

    3. 兼容性:导航控件与ASP.NET的主题和皮肤机制相结合,允许开发者轻松改变导航的外观和感觉,以适应网站的整体设计。 4. SEO友好:通过正确配置,导航控件可以生成对搜索引擎友好的链接,有助于提高网站的搜索引擎...

    asp.net导航条

    ASP.NET 导航条是构建Web应用程序中常用的一种组件,用于提供网站的层级结构和页面间的导航链接。在ASP.NET框架中,导航条通常由服务器控件如TreeView、Menu或NavigationBar来实现,这些控件可以帮助开发者创建动态...

    亮剑ASP.NET项目开发案例导航 ppt

    6. **页面生命周期和状态管理**:了解ASP.NET页面如何从请求到响应的过程,以及在不同阶段如何处理用户交互,是开发者必备的知识。这包括Page生命周期、ViewState、Session、Cookie等状态管理手段。 7. **安全性**...

    ASP.NET数据库项目案例导航

    在"ASP.NET数据库项目案例导航"中,我们可以预见到这个压缩包可能包含了多个章节,涵盖了ASP.NET与数据库交互的关键知识点。 1. ** chap01 - 基础概念** 这一章可能介绍了ASP.NET的基本概念,包括Web Forms、MVC...

    ASP.NET页面跳转

    本文将深入探讨ASP.NET页面跳转的多种方法及其应用场景,帮助开发者更好地理解和掌握这一核心技能。 #### 1. 使用`<a>`标签进行页面跳转 最基础的页面跳转方式是通过HTML的`<a>`标签,它通过`href`属性指定目标...

    asp.net导航站源码

    1. **ASP.NET Web Forms**:这是一种常用的ASP.NET开发模型,它允许开发者通过拖放控件和事件驱动编程来创建页面。在这个源码中,可能包含了多种Web表单,用于展示和管理导航链接。 2. **C#或VB.NET**:这两种.NET...

    网站导航(asp.net版本)

    在ASP.NET技术框架下,构建一个网站导航系统是开发web应用程序的重要组成部分。网站导航系统的主要目的是为用户提供方便快捷的方式,浏览网站的各个部分,确保用户能够轻松地找到所需信息。以下将详细介绍如何在ASP...

    ASP.NET递归生成树导航示例

    在ASP.NET页面中,你可能需要将这个递归函数的结果绑定到TreeView控件: ```aspx <asp:TreeView ID="tvNavigation" runat="server" ShowCheckBoxes="True" OnNodeDataBound="tvNavigation_NodeDataBound"> </asp:...

    ASP.net页面设置

    总之,ASP.NET页面设置涉及到了网页的创建、布局、控件、数据绑定、导航、错误处理和状态管理等多个方面。掌握这些知识点,开发者就能构建出功能丰富、用户友好的网页应用。通过不断的实践和学习,可以进一步提升ASP...

    ASP.NET网址导航 v1.0.zip

    总结来说,ASP.NET网址导航项目是一个很好的起点,可以帮助初学者理解ASP.NET Web Forms的运作方式,以及如何在实际环境中构建Web应用。通过研究和模仿这个项目,你可以逐步提升你的ASP.NET开发技能,并且能够独立...

    asp.net2.0导航菜单

    总之,ASP.NET 2.0中的导航菜单功能强大且灵活,开发者可以根据项目需求选择合适的数据源和呈现方式。通过掌握Menu控件的使用,结合SiteMap数据源和自定义样式,我们可以创建出既美观又实用的导航菜单,提升用户体验...

Global site tag (gtag.js) - Google Analytics