APP下载

浅析ASP.NET页面导航技术

2010-06-06刘洪坡李金锁

河北软件职业技术学院学报 2010年3期
关键词:服务器端控件浏览器

刘洪坡,李金锁,石 磊

(河南工业职业技术学院,河南 南阳 473000)

ASP.NET是微软提供的Web应用程序开发平台,为建立和部署企业级Web应用程序提供了服务。对Web应用程序开发而言,在各个页面之间自由地跳转是最基本的要求。ASP.NET为页面导航提供了多种技术,这些技术之间有细微的差别,要对它们有一个系统的认识和了解才能发挥其各自优势。了解页面导航的原理,明确各技术的优缺点,根据需要灵活选择适合的导航技术对Web应用程序开发来说非常重要。

1 超级链接

从一个页面导航到另外一个页面最简单的方式是使用超级链接,在ASP.NET中,既支持标签,又提供了一个Web服务器控件(HyperLink控件)来实现超级链接。

1.1 标签

标签是Web应用程序开发中最常用的一种导航方法,其用法如:,当用户点击“进入WebForm2”超级连接时,页面将被导航到WebForm2.aspx。由于其runat属性被设置为server,所以可以在服务器端用编程的方式改变其导航目标,如:Link1.href="WebForm3.aspx"。

1.2 Hyperlink控件

Hyperlink控件是用NavigateUrl属性来指定要导航到的页面的Url地址,其用法如:进入 WebForm2,当用户点击“进入WebForm2”超级链接时,WebForm2.aspx页面执行并将结果发送回浏览器。由于其在服务器端运行,所以可以用代码修改其NavigateUrl属性,从而实现目标页面可动态变化的超级链接,如:HyperLink1.NavigateUrl="~/WebForm3.aspx",该语句执行后,页面被导航到WebForm3.aspx。使用 Hyperlink 控件,也可以导航到其他网站上的页面。

使用超级链接实现页面导航,主要用于由用户来决定何时跳转页面,可以用程序来控制导航目标。

2 跨页面提交

ASP.NET从2.0开始,引入了一种新的数据提交方法:Cross-Page技术,即PostBack触发在另一个页面。支持此技术的是一个名为PostBackUrl的属性,用于指定所发送到的Url地址,该属性由IButtonControl接口定义,实现该接口的控件,如ImageButton、LinkButton、Button,都拥有此属性。将PostBackUrl属性设置为要导航到的页面Url地址,如:当用户单击"Button1"按钮时,页面将被提交到WebForm2,从而实现页面导航。该技术不能导航到其他网站上的页面。

3 编程实现页面导航

在用ASP.NET开发Web应用程序的过程中,有时需要实现页面自动导航,要实现此功能,可使用ASP.NET提供的内部对象 Response和Server以编程的方式加以解决。根据导航操作发生的位置不同分为客户端导航、服务端导航两种方式。

3.1 客户端导航

Response.Redirect方法导航操作发生在客户端,导航机制是:首先发送一个Http响应到客户端,通知客户端跳转到一个新的页面,然后客户端再发送页面导航请求到服务器端,Web服务器执行目标页面,并把执行结果发送回客户端,其用法如:Response.Redirect("~\WebForm2.aspx"),该代码执行后,将被导航到WebForm2页面。使用Response.Redirect方法实现页面导航后,客户端浏览器地址栏的Url地址将变为目标页面,原始页面进行的处理全部丢弃,其内部控件保存的所有信息将丢失,所以不能访问原始页面提交的数据,但我们可以使用Session、Cookies、Application等对象进行页面间数据的传递。该方法与Web服务器进行了两次通信,一次是对原始页面的请求,另一次是对目标页面的请求,所以响应速度较慢。在把查询字符串作为Url地址的一部分进行导航时,如果查询字符串包含有汉字,需要先进行编码格式的转换,如:string message=Server.UrlEncode("查询汉字"),否则将会出现乱码。使用 Response.Redirect方法既可以导航到当前Web服务器中的资源,又可以导航到其他服务器上的资源,可以导航到任何页面,没有站点页面限制,但不能跳过Web应用程序登录保护。

Response.Redirect方法主要用于需要将查询字符串作为Url的一部分传递给目标页面时使用,或者导航到HTML页面。

3.2 服务端导航

3.2.1 Server.Transfer

Server.Transfer方法导航操作发生在服务器端,服务器将执行流程转入同一Web服务器上的另一个aspx页面进行处理,从而实现了同一Web服务器上aspx页面间的导航(但不涉及到登录),同时将页面的控制权移交给目标页面,这时Web服务器并没有丢弃原始页面的处理结果,只是把进行了一半的处理转到目标页面,其用法如:Server.Transfer("~\WebForm2.aspx")。由于这种导航操作是在服务器端进行的,浏览器不知道页面已经发生了跳转,所以导航之后浏览器地址栏中的Url地址不变,而页面内容已经发生了变化,但页面跳转过程中Request、Session等对象保存的信息不变,导航之后可以继续使用原始页面提交的数据。Server.Transfer方法直接在服务器端执行页面导航,避免了不必要的网络通信,处理速度快,从而获得了更好的性能和浏览效果,但此方法不能导航到其他Web服务器页面,只能在同一站点下实现页面导航,而且能够跳过登录保护。

为了演示Server.Transfer方法的导航原理,新建一个WebForm1页面,在WebForm1上添加一个Button1命令按钮,并将Button1的Text属性设置为“导航到WebForm2”,其Button1_Click事件代码为:Server.Transfer("~\WebForm2.aspx"),如图1所示。再添加一个WebForm2页面,在WebForm2上添加一个Label1标签,并将Label1的Text属性设置为“WebForm2页面”。将WebForm1设置为起始页,启动Web应用程序,单击WebForm1上的Button1按钮,可以看到浏览器的地址栏和标题均没有发生变化,而页面内容已经改变,如图2所示。

图1 Server.Transfer方法执行前页面

图2 Server.Transfer方法执行后页面

Server.Transfer方法主要用于需要将执行流程转到同一Web服务器上的另一aspx页面时,其最大的特点是Url仍然是跳转前的页面的Url地址,跳转后保留了Request和Session对象中的值,可以继续使用导航前原始页面的数据。

3.2.2 Server.Execute

Server.Execute方法将执行同一Web服务器上的目标页面,它并没有打断Web服务器对原始页面的处理过程,而是开启另外一个线程来处理目标页面,执行完毕后不改变原始页面的位置,捕获目标页面的输出结果,然后将结果插入原始页面的应答流中,最终的效果是将原始页面和目标页面两个页面的输出结果合二为一,或者在原始页面指定的位置输出目标页面的结果。其用法一:Server.Transfer("~\WebForm2.aspx"),该语句执行完毕,将WebForm2页面的输出追加到原始页面的输出流中。用法二:System.IO.StringWriter WR=new System.IO.StringWriter(),Server.Execute(" ~\WebForm2.aspx",WR),Label1.Text=WR.ToString(),上述三语句执行完毕,将WebForm2页面的输出结果在Label1标签中显示,采用这种方式使用该方法,可以在原始页面中方便地调整目标页面输出结果的位置。Server.Execute方法类似于针对aspx页面的一次函数调用,目标页面能够访问原始页面的表单数据和查询字符串集合。

为了说明Server.Execute方法的执行流程,新建一个WebForm1页面,在WebForm1上添加一个Label1标签,并将 Label1的 Text属性设置为“WebForm1页面”,添加一个Button1命令按钮,并将Button1的Text属性设置为“导航到WebForm2”,如图3所示,其Button1_Click事件处理过程如下:

添加一个WebForm2页面,在WebForm2上添加一个Label1标签,并将Label1的Text属性设置为“WebForm2页面”。将WebForm1设置为起始页,启动Web应用程序,单击WebForm1上的Button1按钮,WebForm1页面上Label1标签的内容被替换成WebForm2页面上Label1标签的内容,如图4所示。

图3 Server.Execute方法执行前页面

图4 Server.Execute方法执行后页面

该方法常用于需要将目标页面的输出结果插入到原始页面的时候,而且多数情况下是在表格中将某目标页面用类似于嵌套的方式插入原始页面。

4 页面导航方法比较

(1)标签和Hyperlink控件在页面上显示为超级链接,由用户决定页面导航的时机。标签的href属性和Hyperlink控件的NavigateUrl属性在服务器端可以通过编程的方式重新设定,从而实现可动态变化的超级链接。

(2)跨页面提交技术利用实现IButtonControl接口的按钮的PostBackUrl属性指定导航的目标页面,只能在同一个站点下实现页面导航。

(3)Response.Redirect方法浏览器要和服务器进行两次通信,响应速度比较慢,但它可以导航到任何页面,没有站点页面限制。由于它不能跳过Web应用程序登录保护,导航后原始页面内部控件保存的所有数据信息将丢失,因此,需要利用Session、Cookies、Application 等对象进行页面数据的传递。

(4)Server.Transfer方法浏览器与服务器只进行一次通信,速度较快,但必须在同一站点下进行页面导航。导航发生在服务器端,导航后浏览器的地址栏仍然保留原始页面的Url,使用该方法能够跳过Web应用程序登录保护。

(5)Sever.Execute方法类似于函数的一次调用,原始页面不会中断执行,而是创建一个新的线程来处理目标页面,并把目标页面的输出结果返回给原始页面。该方法也必须在同一站点进行页面导航。

5 页面导航方法总结

ASP.NET给我们提供了多种页面导航方法和技术,在用ASP.NET开发Web应用程序时,应该在适当的时候选择合适的导航方法和技术,其一般原则如下:

(1)如果要让用户来决定何时进行页面导航以及导航到哪一个页面,或者要用程序来控制导航的目标,但导航的时机由用户来决定,超级链接最适合。

(2)如果要把用户导航到另一台服务器上的资源,或者把用户导航到非aspx资源,或者要将查询字符串作为Url的一部分进行传递时,使用Response.Redirect方法最适合。

(3)如果要将程序执行流程转入同一Web服务器上的另一个aspx页面,使用Server.Transfer方法最合适,导航操作在服务器上进行,减少了网络通信,提高了响应速度,从而能够获得更好的性能和浏览效果。

(4)如果要捕获目标页面的输出结果,并将结果插入原始页面的特定位置,则应使用Server.Execute方法。

(5)如果要确保HTML输出的合法性,最好使用Response.Redirect方法,不要使用Server.Transfer或Server.Execute方法,因为Server.Execute或Server.Transfer方法返回给客户端的页面包含多个、标记,不合法的HTML页面,在有些浏览器中可能会发生错误。

[1]余金山,林慧,王涛.Asp.NET 3.5网站开发全程推演与视频精讲[M].北京:电子工业出版社,2009.

[2]李千目,严哲.ASP.NET程序设计与应用开发[M].北京:清华大学出版社,2009.

[3]田洪云,ASP.NET页面跳转方法研究[J].科技信息,2006(12).

猜你喜欢

服务器端控件浏览器
Linux环境下基于Socket的数据传输软件设计
反浏览器指纹追踪
关于.net控件数组的探讨
浅析异步通信层的架构在ASP.NET 程序中的应用
基于Qt的安全即时通讯软件服务器端设计
环球浏览器
ASP.NET服务器端验证控件的使用
网页防篡改中分布式文件同步复制系统
基于嵌入式MINIGUI控件子类化技术的深入研究与应用
浏览器