1

遇到问题Response.Redirect()并收到错误:

无法评估表达式,因为代码已优化或本机框架位于调用堆栈顶部

我用谷歌搜索并在这里找到了一些主题,例如: 无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上

人们提出将第二个参数设置为false值以使其工作的地方,例如:

Response.Redirect("PageName.aspx", false);

但至于我的程序,它并没有重定向到新的程序......它只是继续留在这个页面上。

我在其他页面上做了一个断点,我想重定向它。但是断点没有任何事件可以捕获。看起来它只是不将请求发送到另一个页面。

我的代码相当大,所以我没有在这里发布代码,而是在 ideone:http: //ideone.com/bQzCJd

Redirect()方法在 上57th line,其中:

  • 发生异常,如果第二个参数设置为true
  • 什么都没有发生,如果设置为false

我必须做些什么来修复它?

4

3 回答 3

1

发生异常,如果第二个参数设置为 true

是的,ThreadAbortException因为您在 a中重定向Try-Catch

你为什么不使用Response.Redirect("PageName.aspx")但在之后try/catch?使用一个bool变量,例如redirectCabinet,您可以在重定向之前检查它:

bool redirectCabinet = false;
try
{
    // ...
    if (tmpStr != String.Empty)
    {
        if (pageHandler.Request.HttpMethod == "GET")
        {
            if (pageHandler.Request.Params["method"] == "checkAuth")
            {
                // ...
                bool userExists = Convert.ToBoolean(mysqlObject.MakeScalar(ref mysqlConn,
                if (userExists)
                {
                   // ...
                    redirectCabinet = true;
                    //Response.Redirect("Cabinet.aspx");
                }
                // ...
            }
        }
        //....
    }
} catch (Exception exc)
{
    exc.ToString();
}

if(redirectCabinet)
    Response.Redirect("Cabinet.aspx");
于 2013-03-10T00:45:16.993 回答
1

我建议你避免 Abort Exception,并使用 true 来结束执行并转到下一页。

try
{
    // this is throw the ThreadAbortException exception
    Response.Redirect("SecondEndPage.aspx", true);
}
catch (ThreadAbortException)
{
    // ignore it because we know that come from the redirect
}
catch (Exception x)
{

}

类似:https ://stackoverflow.com/a/14641145/159270

于 2013-03-10T00:46:22.827 回答
0

即使使用评论中提供的解决方案,它也不能正常工作,但如果使用 true 重定向endRequest,它应该可以工作。

像这样:

if(redirectCabinet)
    Response.Redirect("Cabinet.aspx",true);
于 2015-04-02T13:15:31.030 回答