asp.net 使用npoi导出excel后,刷新界面,一直无法解决,求大神指导

gxxloveszj 2015-05-05 02:37:34
使用npoi 导出excel代码:
var mStream = Excel.GetUtil(filename).GetStream(ds.Tables[0]);
MemoryStream ms = mStream as MemoryStream;
Response.ContentType = "application/vnd.ms-excel";
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
Response.AddHeader("Content-Length", ms.ToArray().Length.ToString());
System.IO.File.WriteAllBytes(HttpRuntime.AppDomainAppPath + "\\uploadfile\\" + filename, ms.GetBuffer());
var util = Excel.GetUtil(filename);
Response.BinaryWrite(ms.ToArray());
点击导出excel按钮后,弹出防止多次点击的div,但是当excel导出完成后,div无法消失,也就是在导出excel后的语句无法执行,有没有人遇到过这种情况,求解啊。。。。。
...全文
530 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenxiao21 2016-01-07
  • 打赏
  • 举报
回复
楼主怎么解决的?
马球球 2015-12-24
  • 打赏
  • 举报
回复
我想问下楼主,这段代码是在一般处理程序中写还是在哪里写,,我的根本不弹出来Excel,不能下载到
gxxloveszj 2015-11-09
  • 打赏
  • 举报
回复
以解决,使用session来做的
  • 打赏
  • 举报
回复
几乎所有的浏览器,当它打开一个(消息头中)标明有下载关键字段的网页时,当下载完毕都会自动自动关闭页面。如果你的客户端 javascript 程序去打开另一个页面,那么这个 open 函数返回的页面是可以被你的 javascript 查询其“是否还存在”的状态的,也可以捕获其unload 事件的,是完全可以知道何时下载完毕的。 关键是,没有必要搞这种监听。用户如果等5秒钟之后再次点下载按钮,你就可以给他在从上次输出 excel 创建的缓存中,再次下载一份。这用不着修改3、4行代码,而可以提供功能。何乐而不为?
  • 打赏
  • 举报
回复
“也就是在导出excel后的语句无法执行”这里根本没有此类代码,导出excel的语句根本就是在另外一个页面上的。而弹出的div也无需等待什么导出完毕,只要保证5秒钟内不能重复按下去就足矣了。实际上就算是允许重复按下去,你的后台也可以判断用户是否是连续按了。实际上就算是你的后台也懒得去判断,那么打开另一个下载页面把刚刚“缓存的内容”重新下载也挺好,因为过呢本不需要重新产生excel。
还想懒够 2015-05-07
  • 打赏
  • 举报
回复
由于HTTP的无状态协议,提交过去以后后台就不知道前台的状态,后台返回后,又是各干各的。你是无法知道用户什么时候开始下载的。并且由于返回的不是text/html,而是二进制,因此你的浏览器也不知道是不是已经下载完成。因此只有假借一下Session(当然,这个并不是一个很好的方案,仅只是一个后台的假设),然后前端用心跳去不停地判断状态,当点击下载,前端遮住,后台执行,当后台准备完毕,前端也获取到状态了,因此就可以去除遮罩了。如附件所示: http://download.csdn.net/detail/jjkk168/8671123
  • 打赏
  • 举报
回复
“导出页面”应该在一个弹出页面导出,原始的页面不应该刷新,而是在原始页面(单页javascript程序)上自动改变按钮的状态。
gxxloveszj 2015-05-07
  • 打赏
  • 举报
回复
引用 4 楼 mimiooo1003 的回复:
点了后暂时让那个按钮处于不可用状态不就可以了
不可用状态是可以,但是,在导出excel代码的后面接着的代码就会失效,按钮恢复使用的代码没有执行,无法恢复
义薄A云天 2015-05-06
  • 打赏
  • 举报
回复
引用 楼主 gxxloveszj 的回复:
使用npoi 导出excel代码: var mStream = Excel.GetUtil(filename).GetStream(ds.Tables[0]); MemoryStream ms = mStream as MemoryStream; Response.ContentType = "application/vnd.ms-excel"; HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8)); Response.AddHeader("Content-Length", ms.ToArray().Length.ToString()); System.IO.File.WriteAllBytes(HttpRuntime.AppDomainAppPath + "\\uploadfile\\" + filename, ms.GetBuffer()); var util = Excel.GetUtil(filename); Response.BinaryWrite(ms.ToArray()); 点击导出excel按钮后,弹出防止多次点击的div,但是当excel导出完成后,div无法消失,也就是在导出excel后的语句无法执行,有没有人遇到过这种情况,求解啊。。。。。
我认为楼主做的不错啊,点了之后要加载一会吧?客户等不及了多点几次,不就卡死了?可惜不知道怎么解决
mimiooo1003 2015-05-06
  • 打赏
  • 举报
回复
点了后暂时让那个按钮处于不可用状态不就可以了
gxxloveszj 2015-05-05
  • 打赏
  • 举报
回复
引用 1 楼 Z65443344 的回复:
为什么要弹出防止多次点击的div? 点击了,页面会先刷新,然后弹出下载对话框,点了是之后,就下载文件了 人家想再下载一次,就再点呗,为什么不让点
是这样的,点了以后,我还要从数据库中取数据,然后生成excel并写入,时间会有点长,造成假死
於黾 2015-05-05
  • 打赏
  • 举报
回复
为什么要弹出防止多次点击的div? 点击了,页面会先刷新,然后弹出下载对话框,点了是之后,就下载文件了 人家想再下载一次,就再点呗,为什么不让点

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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