0

我们有一个 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 模块。

4

1 回答 1

1

当您生成文件并使用要下载的文件响应用户时。浏览器无法处理其他操作或响应,例如注册启动脚本或其他。但是你可以发回一个cookie。

因此,处理此问题的一种方法是在某些客户端代码单击下载并显示您的进度指示器时触发它们,然后根据您的实现方式检查 cookie 是否存在。当这种情况发生变化时,您可以隐藏进度。

解决方案有点复杂,但这个答案显示了如何做到这一点的详细信息:

于 2018-05-23T13:32:49.893 回答