我有Default.aspx页面,它继承自BasePage.cs,它继承自System.Web.UI.Page.BasePage是我在加载时每页必须做的一些常见事情.
在BasePage中,假设我正在检查X.如果X = 1,那么我将立即重定向到我的"Discontinued.aspx"页面并停止执行BasePage.如果我发现X = 1,我说:
HttpContext.Current.Response.Redirect("Discontinued.aspx",true);
我希望重定向停止执行BasePage并立即跳出 - 因此上面语句中的"true" - 应该停止执行当前页面,据我所知.问题是,它没有.我期待重定向抛出"线程中止异常".
当我在调试模式下运行时,它会逐步调整,就好像它不仅仅是重定向和离开一样.
但重定向仍然开始 - 一旦我完成了其他的BasePage,"Discontinued"页面就会因重定向而开始加载.
有没有理由我的Redirect不会杀死BasePage的执行?
Response.Redirect的第二个参数是endResponse
,但工具提示显示"指示当前页面的执行是否应该终止".这是误导性的,因为当变量为true时,页面的执行实际上不会终止.它将完成运行任何代码.然而,不同的是,Render事件被取消,并且响应立即被对象移动的头部刷新.
您需要手动退出任何方法,Response.Redirect/Response.End将不会为您执行此操作.此外,如果您需要条件来查看页面是否已被重定向,请查看Response.IsRequestBeingRedirected.
你是退出调用重定向的函数,例如
...redirect(stopit,true); return;
?