带有endResponse = false的Response.Redirect不会立即重定向

时间:2014-07-10 14:38:43

标签: asp.net redirect webforms response.redirect

我有一个执行长时间运行过程的按钮,所以我想重定向到成功页面,直到过程完成,这是一个代码示例:

Response.Redirect("Page_URL", false);
Thread.Sleep(100000);

问题:页面未立即重定向,等待100秒然后重定向。

请问任何想法?

3 个答案:

答案 0 :(得分:2)

第二个参数将立即结束响应,如果将其设置为true,则重定向。 True将导致在重定向之外不再执行代码,但由于您将其设置为false,因此其余代码将执行,然后重定向将发生,这就是您遇到延迟的原因。有关详细信息,请参阅MSDN

  

在页面处理程序中使用此方法终止请求时   一页并开始另一页的新请求,将endResponse设置为   false然后调用CompleteRequest方法。如果指定true   对于endResponse参数,此方法调用End方法   原始请求,抛出ThreadAbortException异常   当它完成。此异常对Web有不利影响   应用程序性能,这就是为什么传递false的原因   建议使用endResponse参数。有关更多信息,请参阅   结束方法。

如果你希望重定向在你的漫长过程之后发生,你应该设置一些东西,以便在完成过程时触发重定向,例如通过ajax调用执行长过程并轮询它以获得进度然后重定向。

答案 1 :(得分:2)

让长进程在不同的线程上工作,然后它会立即重定向。

或者您可以使用ajax并向用户显示进度,然后重定向到成功页面(如果长时间过程失败并且您不希望您的用户看到失败的成功消息,将会有所帮助)

答案 2 :(得分:0)

这段代码就行了。

 Response.Redirect(“Page_URL”, false);

 var t = Task.Factory.StartNew(() =>

                            {

                                // your code here

                            });