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




次 の モジュール は 最適 化 を 有効 に され て (7)

私はエラーを取得しています:

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

リピーターのitemcommandイベントの新しいページにリダイレクトしました。 このエラーは次の行で発生します。

string url = "~/Galleries/AlbumImageList.aspx?UId=" + this.UserId.ToString() + "&AlbumId=" + e.CommandArgument.ToString();
Response.Redirect(url);

誰でも私を助けてくれる? そこに何か悪いですか? _COMPlusExceptionCode532459699です。


解決

この問題を回避するには、次のいずれかの方法を使用します。

  • Response.End場合は、 Response.End代わりにHttpContext.Current.ApplicationInstance.CompleteRequest()メソッドを呼び出して、コード実行をApplication_EndRequestイベントにバイパスします。

  • Response.Redirect場合、 endResponseパラメータにfalseを渡してResponse.Endへの内部呼び出しを抑制するResponse.Redirect(String url、bool endResponse)オーバーロードを使用します。 次に例を示しますResponse.Redirect ("nextpage.aspx", false); この回避策を使用する場合、Response.Redirectに続くコードが実行されます。

  • Server.Transfer場合は、代わりにServer.Executeメソッドを使用します。

症状

Response.End、Response.Redirect、またはServer.Transferメソッドを使用すると、ThreadAbortException例外が発生します。 try-catchステートメントを使用して、この例外をキャッチすることができます。

原因

Response.Endメソッドは、ページの実行を終了し、アプリケーションのイベントパイプラインのApplication_EndRequestイベントに実行を移行します。 Response.Endに続くコード行は実行されません。

両方のメソッドが内部的にResponse.Endを呼び出すため、この問題はResponse.RedirectおよびServer.Transferメソッドで発生します。

状態

この動作は仕様です。

プロパティ

文書番号:312629 - 最終更新日:2012年8月30日 - リビジョン:4.0

に適用されます

  • Microsoft ASP.NET 4.5
  • Microsoft ASP.NET 4
  • Microsoft ASP.NET 3.5
  • Microsoft ASP.NET 2.0
  • Microsoft ASP.NET 1.1
  • Microsoft ASP.NET 1.0

キーワード: kbexcepthandling kbprb KB312629

ソース: PRB:Response.End、Response.Redirect、またはServer.Transferを使用するとThreadAbortExceptionが発生する


このコードを使用して問題を解決してください:

string path = AppDomain.CurrentDomain.BaseDirectory.ToString() + "Uploadfile\\" + fileName;
System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read);
byte[] bt = new byte[fs.Length];
fs.Read(bt, 0, (int)fs.Length);
fs.Close();
Response.ContentType = "application/x-unknown/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName;+ "\"");
try
{
    if (bt != null)
    {
        System.IO.MemoryStream stream1 = new System.IO.MemoryStream(bt, true);
        stream1.Write(bt, 0, bt.Length);
        Response.BinaryWrite(bt);
        //Response.OutputStream.Write(bt, 0, (int)stream1.Length);
        Response.Flush();
        // Response.End();
    }
}
catch (Exception ex)
{
    Response.Write(ex.Message);
    throw ex;
}
finally
{
    Response.End();
}


アップデートパネルとリンクボタンを使用してExcelをダウンロードする場合は、パネル内にポストバックトリガを追加するよりも

<asp:PostBackTrigger ControlID="lnkTemplate" /> 

クリックイベント内のコードの後ろに

string ServerPath = System.Configuration.ConfigurationManager.AppSettings["FilePath"] + "Template.xlsx";
System.IO.FileInfo file = new System.IO.FileInfo(Server.MapPath(ServerPath));

HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());
            HttpContext.Current.Response.ContentType = "application/octet-stream";
 HttpContext.Current.Response.TransmitFile(file.FullName);
 HttpContext.Current.Response.Flush();
 HttpContext.Current.ApplicationInstance.CompleteRequest();

次のように、 Response 2番目の引数をfalseにします。

Response.Redirect(url,false);

私はResponse.End()非同期トリガーボタンを使用していた問題に他の人が入り込んでいる

<asp:AsyncPostBackTrigger ControlID="btn_login" />

更新パネルに表示されます。 私は定期的にポストバックに切り替えたが、それはうまくいかなかった。

<asp:PostBackTrigger ControlID="btn_login" />. 

私はページをリダイレクトしていたので、これは実行可能な解決策でした。


Request.Redirect(url,false);

falseは、現在のページの実行を終了する必要があるかどうかを示します。





response.redirect