response下载问题

fangshaoshen 2009-08-03 03:55:54
首先看我的源码吧




//查询数据库,返回DataTable
System.Data.DataTable dt = LogicLayer_AMonitorDataInfo.GetDataTable(dataInfo);
StringWriter sw = new StringWriter();
foreach (DataRow dr in dt.Rows)
{
sw.WriteLine(dr["数据编号"] + "\t" + dr["站点名称"]
}
sw.Close();
Response.AddHeader("Content-Disposition", "attachment; filename=AMonitorData.xls");
Response.ContentType = "application/ms-excel";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
Response.Clear();
Response.Write(sw);
Response.Buffer = true;
Response.Flush();
//Response.End();


现在问题是。下载下来的数据没有问题, 就是数据后面 接着是页面的HTML代码。
不知道该怎样清除掉这些代码呢?
我开始是使用Response.End();方法, 发现会报错,但是捕捉不到错误。
请教这是什么原因让这个方法报错呢?
...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangshaoshen 2009-08-04
  • 打赏
  • 举报
回复
wmjcnn 回答完全正确。 少了一个close方法, 下载的时候就会吧页面的HTML代码也下下来。 感谢HTML的回复。
wmjcnn 2009-08-03
  • 打赏
  • 举报
回复
Response.Clear();
Response.ClearHeaders();
Response.Charset = "GB2312";
Response.ContentEncoding = Encoding.GetEncoding("GB2312");
Response.ContentType = "application/octet-stream";

Response.AddHeader("Content-Disposition", "attachment; filename=AMonitorData.xls");
Response.Write(sw);
Response.Buffer = true;
Response.Flush();
Response.Close();
这样试一下
oo_2008 2009-08-03
  • 打赏
  • 举报
回复
楼主应该是下载的excel文件时。。。正在终止线程,用上面的方法试试
oo_2008 2009-08-03
  • 打赏
  • 举报
回复
症状
如果使用 Response.End、Response.Redirect 或 Server.Transfer 方法,将出现 ThreadAbortException 异常。您可以使用 try-catch 语句捕获此异常。

原因
<!-- Inject Script Filtered -->

Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中的 Application_EndRequest 事件。不执行 Response.End 后面的代码行。

此问题出现在 Response.Redirect 和 Server.Transfer 方法中,因为这两种方法均在内部调用 Response.End。

解决方案
要解决此问题,请使用下列方法之一: 对于 Response.End,调用 HttpContext.Current.ApplicationInstance.CompleteRequest 方法而不是 Response.End 以跳过 Application_EndRequest 事件的代码执行。
对于 Response.Redirect,请使用重载 Response.Redirect(String url, bool endResponse),该重载对 endResponse 参数传递 false 以取消对 Response.End 的内部调用。例如: Response.Redirect ("nextpage.aspx", false);

如果使用此替代方法,将执行 Response.Redirect 后面的代码。
对于 Server.Transfer,请改用 Server.Execute 方法。
wmjcnn 2009-08-03
  • 打赏
  • 举报
回复
楼主你是想直接下载成xls文件,还是先开启一个视窗自己存储啊?
lchy110 2009-08-03
  • 打赏
  • 举报
回复
就是个导出excel的代码嘛 去网上google下 很多。。。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧