代码之家  ›  专栏  ›  技术社区  ›  Tig7r

gembox停止后端代码的其余部分在dnn模块中运行

  •  0
  • Tig7r  · 技术社区  · 7 年前

    我们有一个DNN模块,一旦您选择了要导出到的格式,该模块将从我们的ERP系统中获取价目表。我们正在使用gembox生成excel、csv或pdf文件,但我们意识到的问题是,其他代码一旦开始生成要下载的文件,就会停止工作。这意味着回邮停止。

    我们使用的是来自gembox的最后一段代码,它不会硬中止线程: https://gemboxsoftware.deskpro.com/kb/articles/threadabortexception-in-asp-net-application

    我们确保在DotnetNuke中禁用部分呈现。

    然后,当代码触发生成exel、csv或pdf文件时,我们更改后端代码以获取单独的.aspx文件(而不是.ascx文件)。这将阻止回发停止工作。现在将生成下载文件,但我正在尝试停止显示加载图标。我使用了registerstartupscript,它会转到jquery函数来停止它,但它从不激发这个registerstartupscript,即使在单独的文件中,代码包含在pageload部分,并且在调试时代码会通过它。(这是否意味着您不能在除view.ascx文件之外的dnn模块上加载单独的页面?)

    似乎在下载完这个下载文件后前端永远不会更新。这可能是破坏其余代码的HTTP头响应吗?

    如何在不重新加载整个网页的情况下重置/重新加载dnn模块页?

    这是否意味着我必须用某种Web工作者函数编写Ajax函数?我只想在浏览器上弹出下载文件后重新加载dnn模块。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mitchel Sellers    7 年前

    当您生成一个文件并使用该文件对用户作出响应时,将进行下载。浏览器不能处理其他操作或响应,例如注册启动脚本或其他。但你可以寄回一块饼干。

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

    解决方案有点复杂,但是 this answer shows a great detail 关于如何做到这一点: