Excelコードへの変換に問題があります。私は、.NET 4.0でWebサイトのプロジェクトに取り組んでいます、と私は( http://mattberseth.com/blog/2007/04/export_gridview_to_excel_1.htmlに基づいて)次ず、このためのクラスを作成しました:Excelにエクスポート - ThreadAbortException
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("content-disposition",
string.Format("attachment; filename={0}", fileName)); HttpContext.Current.Response.ContentType = "application/ms-excel"; using (StringWriter sw = new StringWriter()) {
using (HtmlTextWriter htw = new HtmlTextWriter(sw)) {
//Create a table to contain the grid
//Add header row
//Add each data row
//Add Footer row
//Render the table into the htmlwriter
// render the htmlwriter into the response
HttpContext.Current.Response.Write(sw.ToString());
HttpContext.Current.Response.End();
}
}
私はそのボタンが含まれているUserControlからこのクラスを呼び出しますページに表示されているGridViewに追加されます。これは期待通りに機能します。ボタンをクリックすると、ダウンロードオプションが表示され、GridViewからのデータを含む結果として得られるExcelスプレッドシートを開くか保存します。
しかし、これを別のGridViewのリンクボタンから呼び出すと、データを格納してエクスポートするための動的なグリッドビューを構築したいと思います。私がそれをすると、私はクラスのResponse.EndコールからThreadAbortExceptionを取得します。
質問1:UserControl内から同じコードを呼び出すと、ThreadAbortExceptionが発生しないのはなぜですか? usercontrolsは独自のスレッドやその他のコンテキストを取得しますか?
ThreadAbortExceptionが発生したときにエラーが発生すると、ApplicationInstance.CompleteRequest()で置き換えようとしました。私がそれを行うと、もはやThreadAbortExceptionが発生しなくなりましたが、これは以前の作業usercontrolを破りました - グリッドからのデータを含む結果として得られるExcelスプレッドシートの代わりに、それは含まれているページのHTMLを含み、そのエラーは空のキャッチで発生します。ただし、ダイナミックに生成されたGridViewでダイレクトコールを修正することはできません。そのコードはjavascriptエラーをレンダリングします。「サーバーから受信したメッセージを解析できませんでした」
私はここで正確に何が起こっているのか理解したいですが、私は理解に関係なく結果を必要とする時点にいます。私が試した他のアプローチ(GridViewの代わりにDataGridなど)は、同じ問題を抱えており、現在のレスポンスを に引き継ぎ、stringwriterとhtmlwriterを使用してデータをレンダリングすると、本質的に同じです。コンテンツタイプをExcelで返すそして、これは明らかに、ユーザーコントロールのコンテキストで動作するので、直接呼び出すときに私はそれが動作しません理由として、私のウィットの終わりにしています...
[なぜ私のasp.netアプリケーションはThreadAbortExceptionをスローですか?](http://stackoverflow.com/questions/12476/why-is-my-asp-net-application-throwing-threadabortexception) –
私はドンこれが重複しているとは思わない - これは、2つのシナリオを扱う非常に特殊なケースである - response.endへの呼び出しで発生するものと、それ以外のものである –