使用C#编写Asp.Net服务器端程序的时候,页面跳转用的最多的莫过于Response.Redirect(),Server.Transfer()以及sever.execute (),在实际的代码编写中常常会遇到“正在中止线程”的错误,我们使用单步到错误catch点,发现捕捉到的异常也没有任何的异常信息。
其实网上已经有很多很好的文章解释了这种现象的原因,是由于在跳转语句执行的时候,会默认地执行Response.End()方法,该方法会要求停止跳转语句之后的所有代码处理,因此,当跳转语句之后仍然存在有代码的时候就会抛出文章开头所提到的异常。
那么,解决方法就是想法设法将跳转语句保持在函数操作的最后一行吗?对于Server.Transfer(),我想是的,至少通过我个人的测试结果是这样的,使用一个经过精心构建的结构,结合try catch finally可以比较好地解决上述问题。但是还有一个更简单的方法,就是利用Response.Redirect()方法的一个重载方法,默认情况下,Response.Redirect()方法只包含一个字符型参数,即要跳转的路径字符串,而它的重载还提供了一个bool型的参数,该参数默认为true,即每次跳转都进行Response.End(),所以我们这里只要将Response.Redirect()的第二个参数设置为false,不执行Response.End()就可以了。