将数据集传递给通用处理程序(ashx)

时间:2012-11-06 11:37:23

标签: c# asp.net httpcontext ashx generic-handler

如何将数据集传递给通用处理程序? 我不想使用session或viewstate来做到这一点。

我正在尝试返回从输入数据集转换的excel文件作为响应。

我已经将数据集内容显示为一个网格中的报告,该网格使用用户设置的某些条件进行过滤。由于查询很昂贵,我也不想在处理程序中执行相同的操作。

如果我可以通过引用传递数据集会更好吗?

2 个答案:

答案 0 :(得分:0)

你无法传递它,你需要缓存结果

您是否不想使用会话?

答案 1 :(得分: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();
}