关于 VS2005 Web 程序的中调用 Server.Transfer() 的怪异问题

zahuifan 2006-12-13 01:52:53
在VS2005所创建的Web程序中,有两个页面,分别是Default.aspx和Default2.aspx

在页面Default.aspx中填加一个按钮Button2,然后在其OnClick事件中填加代码:
protected void Button2_Click(object sender, EventArgs e)
{
try
{
Server.Transfer("Default2.aspx", false);
}
catch (Exception ex)
{
Label1.Text = ex.Message;
}
}
即让其转向页面Default2.aspx.

如果使用断点调试,会发现在执行了Server.Transfer("Default2.aspx", false);这个语句后,会再次进入Default.aspx页面的Page_Load()中,执行一遍Page_Load()中的代码,这不是很奇怪么? 然后就会进入catch (Exception ex),把鼠标悬停在ex变量上,会显示信息:"由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值。"

请问这是为什么? 大家有兴趣可以试一试.
...全文
158 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zahuifan 2006-12-13
谢谢各位的答复.
  • 打赏
  • 举报
回复
SOFT_LIN 2006-12-13
关注!
  • 打赏
  • 举报
回复
liujia_0421 2006-12-13
看了一下,你捕获到的异常应该是:System.Threading.ThreadAbortException

有个说法就是对于这个异常,不用处理..

也就是说
Server.Transfer("Default2.aspx", false);
或者
Response.Transfer("Default2.aspx");

都会产生这个异常,而这时你放在try..catch中所以就被你捕获到了..

或者这样说,Transfer,Response不要放在try..catch..中
  • 打赏
  • 举报
回复
liujia_0421 2006-12-13
没注意过,是吗?试试..
  • 打赏
  • 举报
回复
zhaochong12 2006-12-13
server.Transfer与response.Redirect的作用都是重定向,我认为它与response.Redirect相比有两个优点、一个缺点。



优点:
一、它在服务器端直接重定向,不用像response.Redirect一样先与浏览器通信再重定向,效率高。
二、它可以传递上一个页面的提交值。比如:A页面提交值到B页面,B页面Transfer到C页面,C页面同样可以收到A页面提交的值。



缺点:

不能刷新页面,比如:A页面提交登录信息到B页面,B页面处理后Transfer再到A,A页面得不到刷新,指定了过期也不行。如果A、B页面不在同一个目录下,我们还会发现更多意想不到的结果,使用相对链接的图片、超链接的指向都改变了,造成这种原因是B页面读取A页面内容却以B页面的身份输出,所以路径改变了。



  • 打赏
  • 举报
回复
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2006-12-13 01:52
社区公告

让您成为最强悍的C#开发者