エラーが発生しています:
コードが最適化されているか、ネイティブフレームが呼び出しスタックの上にあるため、式を評価できません。
リピーターのitemcommandイベントで新しいページにリダイレクトしました。次の行でエラーが発生します。
string url = "~/Galleries/AlbumImageList.aspx?UId=" + this.UserId.ToString() + "&AlbumId=" + e.CommandArgument.ToString();
Response.Redirect(url);
誰か助けてくれますか?何か問題はありますか? _COMPlusExceptionCode
は-532459699
です。
以下に示すように、Response
の2番目の引数を作成しますfalse。
Response.Redirect(url,false);
Request.Redirect(url,false);
false
は、現在のページの実行を終了するかどうかを示します。
この問題を回避するには、次のいずれかの方法を使用します。
Response.End の場合、_の代わりに HttpContext.Current.ApplicationInstance.CompleteRequest() メソッドを呼び出しますResponse.Endは、Application_EndRequestイベントへのコード実行をバイパスします。
Response.Redirect には、falseを渡すオーバーロードResponse.Redirect(String url、bool endResponse)を使用しますendResponseパラメーターは、Response.Endへの内部呼び出しを抑制します。例:
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.RedirectメソッドとServer.Transferメソッドで発生します。両方のメソッドが内部でResponse.Endを呼び出すためです。
この動作は仕様です。
記事ID: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が発生する
バグで、Response.Redirect()があり、nexpected location(read:不適切な場所-メンバープロパティゲッターメソッド内で実行されていたことを調査しました)。
問題をデバッグしていて、「式を評価できません...」例外が発生した場合:
Response.Redirect()
の検索を実行し、2番目のパラメーターendResponse= falseを作成するか、これは、デバッガーの「ステップスルー」がその場所に到達する前にRedirect呼び出しを実行するように見えるため、イライラしていました。
この問題の原因とエラーの解決策については、次のリンクを確認してください。
http://support.Microsoft.com/kb/312629/EN-US/
Microsoftサポート記事:
PRB:Response.End、Response.Redirect、またはServer.Transferを使用するとThreadAbortExceptionが発生するPrint Print Email Email
この問題を回避するには、次のいずれかの方法を使用します。Response.Endの場合、Response.EndではなくHttpContext.Current.ApplicationInstance.CompleteRequestメソッドを呼び出して、Application_EndRequestイベントへのコード実行をバイパスします。
Response.Redirectの場合、endResponseパラメーターにfalseを渡すオーバーロードResponse.Redirect(String url、bool endResponse)を使用して、Response.Endへの内部呼び出しを抑制します。
例:Response.Redirect( "nextpage.aspx"、false);
この回避策を使用すると、Response.Redirectに続くコードが実行されます。 Server.Transferの場合は、代わりにServer.Executeメソッドを使用します。
このコードを使用して問題を解決します。
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();
}
私もこれと同じ問題を抱えていましたが、トリッキーでした。私にとっては、Ext.Js javascriptライブラリを使用しているからです。 Ajax呼び出しでにアクセスしたサーバー側コードでresponse.redirectを実行している場合、問題があります。 Ext.jsには、Ext.Redirectメソッドによる回避策があります。
Server.Execute
も使用できます
Response.End()非同期トリガーボタンを使用していた問題に遭遇した他の誰かをちょうど包む
<asp:AsyncPostBackTrigger ControlID="btn_login" />
更新パネルで。私は通常のポストバックに切り替えましたが、最高ではありませんでしたが、うまくいきました。
<asp:PostBackTrigger ControlID="btn_login" />.
ページ上でリダイレクトしているだけなので、これは実行可能なソリューションでした。
更新パネルを使用していて、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();