日期:2014-05-17  浏览次数:20492 次

.ashx文件中输出文件的问题
想点击导出按钮,实现将数据导出为excel,于是做了一个.ashx文件(用于接收导出请求,并执行导出)

toexcel.ashx代码
C# code

                ...

                DataSet ds1 = Member.GetMembers();//获取要导出的数据

                context.Response.Clear();
                context.Response.Charset = "";
                context.Response.ContentType = "application/vnd.ms-xls";
                StringWriter stringWrite = new StringWriter();
                HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

                DataGrid dg = new DataGrid();
                dg.DataSource = ds1;
                dg.DataBind();
                dg.RenderControl(htmlWrite);
                context.Response.AddHeader("content-disposition", "attachment;filename=" + HttpUtility.UrlEncode("abcdefg.xls"));
                context.Response.Write(stringWrite.ToString());
                context.Response.End();       



这段代码如果在服务器按钮事件中写,则可以成功导出excel文件,但在这里
却只输出了一个页面,里面包含了ds1里的所有数据,外加一个“确定”按钮!

不知怎么回事,请指教!

------解决方案--------------------
http://www.cnblogs.com/wrz923/archive/2008/07/17/1245002.html 

接分啊!! 详细的很啊
------解决方案--------------------
用Response.WriteFile()
------解决方案--------------------
下载文件的四种方法
------解决方案--------------------
http://www.cnblogs.com/wrz923/archive/2008/07/17/1245002.html
这个的不错
------解决方案--------------------
直接写一个aspx页面,之后把这个代码复制过去,之后做一个链接就可以了. 


下载和ajax貌似是没啥联系的, 难道我out了.
------解决方案--------------------
下载本来就不会刷新页面,不知你用AJAX的用意是什么
------解决方案--------------------
探讨
别误会了,我想用ajax导出数据(所以并不只是一个简单的下载链接,会有数据的查询及最后的输出下载)!

------解决方案--------------------
使用ajax应该也可以
或许这里dg.RenderControl(htmlWrite);
不能导出,毕竟应该是页面呈现的控件才可以导吧
所以加之楼上的拼datatable方法结合你的方法实现吧
------解决方案--------------------
lz你可以这样嘛。你先在服务器端生成excle,然后下载,下载后删除,
因为本地下载的提示框是js的进程阻涉。页面不刷新
------解决方案--------------------
探讨

引用:

lz你可以这样嘛。你先在服务器端生成excle,然后下载,下载后删除,
因为本地下载的提示框是js的进程阻涉。页面不刷新


谢谢你,不然就沉了!

如果是这样的话,怎么监测用户已下载完成呢?
也就是说删除文件的时机问题。。。
这个似乎办不到吧!!!