ASP.NET四种页面导航方式分析
来源:互联网 发布:百度联盟 域名推广 编辑:程序博客网 时间:2024/05/17 03:22
2012-10-18 20:32
在ASP.NET应用中,Web表单之间的导航有多种方式:用超级链接,用Response.Redirect,用Server.Transfer,或者用Server.Execute。
1)第一种超链接谁都有用过,这种连接方式可以用在任何地方,包括HTML,ASPX,ASHX,甚至包括文件类型等。<ahref="Default.aspx">超链接实现跳转</a>。
2)Response.Redirect{Response.Redirect("Default.aspx");}这种方式相信是我们最常用的了..我们用HttpWatch查看可以看到这种方式的执行的过程中如下图:
根据状态码可以看到,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答(也就是对页面进行重定向),第二次是请求302应答中声明的新页面,得到重定向之后的页面。这种方法可以重定向到ASPX,ASHX,html等页面,也可以重定向到外网。
3)Server.Transfer{Server.Transfer("Default.aspx");}
还是使用工具查看一下执行的过程。
我们可以看到使用Server.Transfer这种方法实现页面之间的导航,浏览器中的URL是不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。
默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。也就是使用{Server.Transfer("Default.aspx",true);}
使用Server.Transfer的第二种方法时有一个Bug就是目标页面将使用原始页面创建的应答流,这导致ASP.NET的验证检查认为新页面的ViewState已被篡改。一种解决方法就是把目标页面Page指令的EnableViewStateMac属性设置成False。
4)Server.Execute{Server.Execute("Default.aspx");}其实从文字表面就看出了,这种方法就是在执行一个页面。这种方法在执行完第二个页面之后返回第一个页面执行。执行完之后我们查看也是只有一次请求。
这时候我们查看一下源代码会发现,这种方法,最终得到的Html页面其实是不合法的,它把两个页面的代码合并在了一起,代码中有了2个<html>和<body>等重复的标签。不过试了一下好像IE、谷歌、FF、Opera都支持这种代码。
Server.Execute还有一种重载方法是带2个参数的,第二个参数允许传入一个TextWriter对象(或者它的子对象,例如StringWriter对象)获取被调用页面的输出,而不是直接追加到输出流,这样,就可以方便的调整原始页面的地址。看下例子:
.cs代码
前台ASPX代码:
执行效果
看看效果就知道了:
查看源代码可以可以看到代码
后面这2种方法只是在内部服务器的前提下重定向操作,但是如果要在后台重定向到外网,那么就只有使用Response.Redirect这种方法,其他的都是没有效果的,会提示错误。
还有请求一般处理程序(ashx)的时候也是只能使用Response.Redirect其他也都是没有作用的。
水平有限,有错之处,欢迎指出。
- ASP.NET四种页面导航方式分析
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式的比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式的比较与选择
- (转载)ASP.NET四种页面导航方式的比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式的比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式之比较与选择
- ASP.NET四种页面导航方式之比较与选择
- [转]ASP.NET四种页面导航方式之比较与选择
- POJ 2488解题报告
- sql sever 和mysql的存储过程的日期时间转换DATEDIFF
- 非常仔细明了 关于如何求解多边形面积
- hdu 4460 Friend Chains
- Regex
- ASP.NET四种页面导航方式分析
- 进制之间的转换
- [struts2][问题集合]
- jsp课程(7)---jsp+servlet+javabean 实现的简单网上购物车
- 布隆过滤器,数据处理的神来之笔!BloomFilter
- uva 442 Matrix Chain Multiplication
- 无刷新多文件上传(iframe)
- JQuery
- 【木头Cocos2d-x 013】游戏实例-《跑跑跑》制作教程(第五篇)——主角上下移动