我重定向页面时出错

时间:2009-09-16 22:04:33

标签: asp.net redirect

我收到错误:

  

“无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上。”

当我将页面从一个页面重定向到另一个页面时。

我正在使用此代码:

try
{
    Session["objtwitter"] = obj_UserDetSumit;

           Response.Redirect("TwitterLogin.aspx");


    }
    catch (Exception ex)
    {

          lblStatus.Text = "Account Creation Failed, Please Try Again";


    }

我得到了一个解决方案,我也尝试了这个Response.Redirect("home.aspx",false); 它不会抛出错误,但它也不会重定向页面。

4 个答案:

答案 0 :(得分:4)

Try-catch在其中的代码周围创建一个线程以捕获异常。当您重定向时,您实际上终止了线程的执行,从而导致错误,因为执行无意识地结束(尽管这是设计)。你不应该在try-catch中重定向,如果你这样做,你应该使用Response.Redirect(“some url”,false);并且还特别捕获ThreadAbortException。

答案 1 :(得分:2)

参考此处:http://msdn.microsoft.com/en-us/library/t9dwyts4.aspx

Response.Redirect调用Response.End,它会抛出ThreadAbortException,因此您需要将代码更改为:

try
{
   Response.Redirect("home.aspx"); 
}
catch(System.Threading.ThreadAbortException)
{
   // do nothing
}
catch(Exception ex)
{
   // do whatever
}

答案 2 :(得分:0)

首先,确保您正在使用调试版本而不是项目的发布版本。其次,确保您在混合模式(托管和本机)中进行调试,以便您可以看到所有当前的调用堆栈。

答案 3 :(得分:0)

我会尝试将您的Response.Redirect移动到try catch块之外,如下所示:

try
{
    Session["objtwitter"] = obj_UserDetSumit;
}
catch (Exception ex)
{
    lblStatus.Text = "Account Creation Failed, Please Try Again";
    return;
}

Response.Redirect("TwitterLogin.aspx");

大多数有此问题的人here通过调用Response.Redirect("TwitterLogin.aspx", false);来解决它,而Response.Redirect(url);没有立即明确地杀死该线程。我不确定为什么这对你不起作用。

我认为问题是你的Response.Redirect在try catch块中。致电Response.End();来电ThreadAbortException,这将招致Response.Redirect(url);

确保在进行重定向后不再尝试进行任何处理。

使用Reflector,您可以看到Response.Redirect(url, true);来电Response.End();

传递true然后调用public void End() { if (this._context.IsInCancellablePeriod) { InternalSecurityPermissions.ControlThread.Assert(); Thread.CurrentThread.Abort(new HttpApplication.CancelModuleException(false)); } .... } ,如下所示:

{{1}}

即使你的代码片段中没有finally,它也可能试图最终执行“空”,但不能因为线程被中止。只是一个想法。