protected void btnPurch_Click(object sender, EventArgs e)
{
string beginDate = txtBeginDate.Text;
string endDate = txtEndDate.Text;
//执行存储过程
if (pandiandal.purch(beginDate, endDate) == true)
//导出数据
{
purch_Toexcel("采购数据&配件数据.xlsx");
}
}
public void purch_Toexcel(string fileName)
{
ExcelPackage excel = new ExcelPackage();
ExcelWorksheet sheet = excel.Workbook.Worksheets.Add("采购数据");
/* 把内容填到excel部分省略*/
fileName = HttpUtility.UrlEncode(fileName);
Response.ContentType = "application/vnd.ms-exel";
Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
Response.Clear();
excel.SaveAs(Response.OutputStream);
Response.Flush();
Response.End();
ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>window.parent.hideLoading();</script>");
}
(红色的是脚本,脚本执行没反应,注释掉上面蓝的代码脚本就正常执行,但不能下载文件)
我要做的功能是点导出excel时页面显示等待状态,执行完(出现下载文件的时候页面恢复正常)
现在是点了按钮的时候一直到下载文件页面都是等待状态
Response.Flush();
Response.End();
这两句删掉试试。。。
你注册脚本那句你网上搜一下是不是也有问题。。。
看来我没记错,注册脚本应该是Page.RegisterStartupScript...
看看这个链接:http://blog.csdn.net/qiujialongjjj/article/details/6680252
注释掉两句也不行,反而导出excel格式有点问题,脚本是可以的,按这个链接的去写也是一样的问题,只要有文件流下载,那个脚本的效果就没有了,不知道是什么原因0.0
@.net包子: 我想应该是你这个思路根本就有问题,你已经将响应的类型改为excel,浏览器就按excel来解析,结果你运行一个注册脚本的东西,再说了,客户端如果是按照excel的格式来分析服务器发来的响应,那如果excel还没下载完,你就要执行那个脚本么?
@顾晓北: 那如果我要实现我想实现的功能应该怎么做呢
@.net包子: 你这个功能都做了什么?
@顾晓北: 点击导出excel的功能用来导公司的一些每月明细数据到excel下载下来,因为数据可能会有点多,而且要执行的储存过程可能也要一些时间,所以要把页面通过JS变成Loading...的动画等待图标,以免出现假死状态,当excel都导到excel可以下载了,就把这个页面变回正常(把Loading...取消)。
@.net包子: 先执行一下存储过程,数据统计好以后再填到excel里面,然后再下载?
@顾晓北: 是的,没错
Response.End();
应该不是,我试过把这句注释掉也是不变,而且不要这句导出的excel会有问题
@.net包子: Response.End();放到最后呢?
@Mr_Lxs: 也一样,执行不了脚本,其它功能没问题
@.net包子: Response.Flush();
Response.End();
都放在后面。
@Mr_Lxs: 我试过将脚本放在方法的开头都不行,只要有下面的下载代码就执行不到脚本,可能是执行了但看不到效果
@.net包子: js脚本是不是有问题?单独执行一下脚本试试。
@Mr_Lxs: 没有问题,直接点击不执行导excel的方法是可以执行成功的
把这句放到上面某一句之后,然后慢慢调试。
有蓝色的代码放在哪里都不行,放在一点击先执行脚本都不行,不要蓝的代码脚本放在哪里都执行。0.0怎么办