1

に問題がありResponse.Redirect()、エラーが発生します。

コードが最適化されているか、ネイティブ フレームがコール スタックの一番上にあるため、式を評価できません

コードが最適化されているか、ネイティブ フレームがコール スタックの一番上にあるため、式を評価できませ

次のように、人々が2番目の引数をfalse値に設定して機能させることを提案している場合:

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

しかし、私のプログラムに関しては、新しいプログラムにリダイレクトされません...このページにとどまり続けます。

リダイレクトしたい他のページにブレークポイントを設定しました。しかし、ブレークポイントがキャッチするイベントはありませんでした。リクエストを別のページに送信していないようです。

私のコードはかなり大きいので、コードをここではなく ideone に投稿しました: http://ideone.com/bQzCJd

Redirect()メソッドは に57th lineあります。

  • 2 番目の引数が に設定されている場合、例外が発生します。true
  • に設定されている場合は何も起こりませんfalse

修正するにはどうすればよいですか?

4

3 に答える 3

1

2 番目の引数が true に設定されている場合、例外が発生します

はい、aでリダイレクトするThreadAbortExceptionためです。Try-Catch

Response.Redirect("PageName.aspx")の後に butを使わないのはなぜ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 に答える