我们有一个DNN模块,一旦您选择了要将其导出到的格式,我们将从ERP系统中获取价目表。我们使用GemBox生成Excel,CSV或PDF文件,但我们已经意识到的问题是,一旦开始生成要下载的文件,其余代码就会停止运行。这意味着PostBack会停止。
我们正在使用GemBox的最后一段代码,它不会中断线程:https://gemboxsoftware.deskpro.com/kb/articles/threadabortexception-in-asp-net-application
我们确保在DotNetNuke中禁用部分渲染。
然后,一旦代码触发生成Exel,CSV或PDF文件,我们就会更改后端代码以获取单独的.aspx文件(而不是.ascx文件)。这可以防止PostBack停止工作。这将生成下载文件,但我试图阻止加载图标显示。我使用RegisterStartupScript转到JQuery函数来阻止它,但它永远不会触发这个RegisterStartupScript,即使在单独的文件中,代码包含在PageLoad部分中,并且代码在调试时通过它。 (这是否意味着您无法在除view.ascx文件之外的DNN模块上加载单独的页面?)
在下载此下载文件后,前端似乎永远不会更新。这可能是破坏其余代码的HTTP标头响应吗?
如何在不重新加载整个网页的情况下重置/重新加载DNN模块页面?
这是否意味着我将不得不使用某种Web Worker函数编写Ajax函数?我想在浏览器弹出下载文件后重新加载DNN模块。
答案 0 :(得分:1)
生成文件并使用该文件响应用户进行下载时。浏览器不能处理其他操作或响应,例如注册启动脚本或其他操作。但你可以发回一个cookie。
因此,处理此问题的一种方法是在单击下载并显示进度指示器时触发一些客户端代码,然后根据您的实现方式检查cookie的存在与否。如果更改,您可以隐藏进度。
解决方案有点复杂,但this answer shows a great detail如何做到这一点: