1

データセットを汎用ハンドラーに渡すにはどうすればよいですか? そのためにセッションやビューステートを使用したくありません。

入力データセットから変換された Excel ファイルを応答として返そうとしています。

ユーザーが設定したいくつかの基準でフィルター処理された 1 つのグリッドで、データセットのコンテンツをレポートとして既に表示しています。クエリは高価なので、ハンドラーでも同じことを実行したくありません。

ハンドラーへの参照によってデータセットを渡すことができればさらに良いでしょうか?

4

2 に答える 2

0

処理されるクラスのオブジェクトを作成してそれに割り当てる以外に、データセットを ashx に渡す方法が見つかりませんでした。次に、オブジェクトの ProcessRequest メソッドを呼び出しました。うまくいき、ビルドに成功しました。しかし、ウェブサイトを公開しようとすると、コードはクラス名が見つからないというエラーを出しました。コードは以下のとおりです。

//this is working fine in VS (build succeeded and ProcessRequest returned the file!) 
//but didn't compile only on publishing
MyHandler handlerObj = new myHandler();
handlerObj.DataSource = myDataset;
handlerobj.ProcessRequest(Context);

汎用ハンドラーを、コンテキストとデータセットを受け入れるメソッドを持つ通常の c# クラスに置き換えることで、問題を解決しました。次に、クラスでメソッドを呼び出し、ファイル ストリームを Context.Response に書き込んだところ、問題なく動作しました。クラスはハンドラーとまったく同じことを行い、IHttpContext から継承する必要はありません

public void ProcessDownload(HttpContext context, DataSet DataSource)
{
    context.Response.Clear();
    context.Response.ContentType = "application/vnd.ms-excel";
    MemoryStream file = getExcelMemStream(DataSource);
    context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "myFile.xls"));
    context.Response.BinaryWrite(file.GetBuffer());
    context.Response.End();
}
于 2012-11-09T12:59:21.270 に答える
0

渡すことはできません。結果をキャッシュする必要があります

セッションを使用したくない理由はありますか?

于 2012-11-06T11:52:16.127 に答える