一、超链接
想必大家都用过HyperLink控件吧,我们设定其NavigateUrl属性后,点击其回跳转到所指的页面,而无需进行服务器回传。
二、服务器传输
指的是Server.Transfer方法。
HttpServerUtility类的Transfer方法将.htm或.aspx页(注:不能是.asp页)的URL作为字符串参数,回发给服务器,接着,终止运行的当前页面开始去请求我们要访问的目的页面。
在使用Server.Transfer方法时值得注意的一点是,由于在当前的页面调用HttpResponse.End方法的时候总是会引发
ThreadAbortException这个异常。通常这个异常并不是什么问题,只是在基于数据库事务操作的Try….Catch()语句块中出现的时
候,会致使该事务无法被提交。除非明确的捕捉到ThreadAbortException这个异常,我们来看如下的例子:
{
transaction.Commit(); //执行事务
Server.Transfer(“test.aspx?id=” + id); //如果成功行事务则转至相应页面
}
Catch(ThreadAbortException ex)
{
//捕捉该异常
}
Catch(Exception ex)
{
Transaction.Rollback(); //事务的回滚操作
}
Finally
{
Connection.Close(); //关闭数据库连接
}
此外,使用Server.Transfer方法源页和目标页必须在同一个应用程序中。而且该方法在使用的时候不验证当前用户是否有权限查看目标页。如果这对于你的应用系统来说这点很重要的话(如在系统中涉及到权限管理的话),不要用该方法。
当重定向到新页面后,你细心的话会注意到浏览器地址栏中的URL还是原来页面的地址,而不是当前页的。浏览器的历史记录也不会显示这次跳转,因而单击浏览器的“后退“按钮一般也不会回退到原来页面。
在Server.Transfer的重载方法中,提供了一个Boolean类型的参数,如果该参数设为true的话则会保留原来页的QueryString和Form集合,这对于需要将完整的控制传送到另一页面时,这个重载方法将非常有用。默认为false。
记住:在一个页面转到另一个页面的过程中(即使视图状态存储在隐藏窗体字段中,这些数据也不会被保存)。这是因为视图状态时页面级的,因而用Server.Transfer方法跳转到另一页面时,视图状态会失效。
三、浏览器重定向
指的是Response.Redirect方法
HttpResponse类中的Redirect方法相当于一个可编程的HyperLink。该方法将.htm或.aspx页面(注:不能是.asp页) 的URL地址作为字符串参数,不经过服务器的回传,客户端直接执行重定向。因此相比之下比Server.Transfer方法相应速度更快。由于它完全是 一个新的服务器请求,因此会强制进行完整的验证和授权。
除非在用一应用中,否则数据时不能从源页传送到目标页的。在这种情况下,数据可以利用会话状态或者应用程序状态来实现传递。
和Server.Transfer方法一样,Response.Redirect的重载方法中也有一个Boolean类型的参数,如果该参数为true则表示当前页的执行应被终止。
四、跨页面传输
页面可以被提交到服务器,然后直接发送到另一个页面。通过特定控件的PostBackUrl属性我们就可以实现这种功能。当这种方法只能发送到另一个.aspx页面而非.asp或.htm页面,当前页的控件可通过Page.PreviousPage属性实现访问。
如果源页和目标页同在一应用系统中,则可以共享会话状态和应用程序状态,以及源页的公共成员。页面可跨页发送到应用程序之外的另一页面,但目标页无法使用源页的数据。
如果可访问目标的PreviousPage属性,则源页将被再次实例化,同时还要恢复来自源页的视图状态。因此,使用PreviousPage属性的执行性能直接受到源页存储的视图状态数据大小的影响。
在随笔中有什么错误之处请大家多多批评,多多交流!