ASP.NET四种页面导航方式分析

 

 2012-10-18 20:32

 

 

     在ASP.NET应用中,Web表单之间的导航有多种方式:用超级链接,用Response.Redirect,用Server.Transfer,或者用Server.Execute

1)第一种超链接谁都有用过,这种连接方式可以用在任何地方,包括HTML,ASPX,ASHX,甚至包括文件类型等。<a href="Default.aspx">超链接实现跳转</a>

2Response.RedirectResponse.Redirect("Default.aspx");}这种方式相信是我们最常用的了..我们用HttpWatch查看可以看到这种方式的执行的过程中如下图:

根据状态码可以看到,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答(也就是对页面进行重定向),第二次是请求302应答中声明的新页面,得到重定向之后的页面。这种方法可以重定向到ASPX,ASHX,html等页面,也可以重定向到外网。

3)Server.TransferServer.Transfer("Default.aspx");

还是使用工具查看一下执行的过程。

我们可以看到使用Server.Transfer这种方法实现页面之间的导航,浏览器中的URL是不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。
  默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。 也就是使用{Server.Transfer("Default.aspx", true);

  使用Server.Transfer的第二种方法时有一个Bug就是目标页面将使用原始页面创建的应答流,这导致ASP.NET的验证检查认为新页面的ViewState已被篡改。一种解决方法就是把目标页面Page指令的EnableViewStateMac属性设置成False

4Server.ExecuteServer.Execute("Default.aspx");}其实从文字表面就看出了,这种方法就是在执行一个页面。这种方法在执行完第二个页面之后返回第一个页面执行。执行完之后我们查看也是只有一次请求。

这时候我们查看一下源代码会发现,这种方法,最终得到的Html页面其实是不合法的,它把两个页面的代码合并在了一起,代码中有了2<html><body>等重复的标签。不过试了一下好像IE、谷歌、FFOpera都支持这种代码。

Server.Execute还有一种重载方法是带2个参数的,第二个参数允许传入一个TextWriter对象(或者它的子对象,例如StringWriter对象)获取被调用页面的输出,而不是直接追加到输出流,这样,就可以方便的调整原始页面的地址。看下例子:

.cs代码

前台ASPX代码:

执行效果

看看效果就知道了:

查看源代码可以可以看到代码

  

后面这2种方法只是在内部服务器的前提下重定向操作,但是如果要在后台重定向到外网,那么就只有使用Response.Redirect这种方法,其他的都是没有效果的,会提示错误。

还有请求一般处理程序(ashx)的时候也是只能使用Response.Redirect其他也都是没有作用的。

水平有限,有错之处,欢迎指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值