如何将数据集传递给通用处理程序?我不想使用会话或视图状态来做到这一点。
我正在尝试返回从输入数据集转换的 excel 文件作为响应。
我已经将数据集内容显示为一个网格中的报告,该网格使用用户设置的一些标准进行过滤。由于查询很昂贵,我也不想在处理程序中执行相同的操作。
如果我可以通过引用处理程序来传递数据集会更好吗?
如何将数据集传递给通用处理程序?我不想使用会话或视图状态来做到这一点。
我正在尝试返回从输入数据集转换的 excel 文件作为响应。
我已经将数据集内容显示为一个网格中的报告,该网格使用用户设置的一些标准进行过滤。由于查询很昂贵,我也不想在处理程序中执行相同的操作。
如果我可以通过引用处理程序来传递数据集会更好吗?
不能通过,需要缓存结果
您不想使用会话的任何原因?
除了创建处理类的对象并分配给它之外,我找不到任何将数据集传递给 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();
}