You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVC中调用SSRS报告返回后如何关闭处理进度指示器?

解决方案

你的场景里默认的表单提交+重定向下载逻辑没有原生的下载完成回调事件,因为浏览器触发文件下载时不会离开当前页面,也不会给前端抛出对应的完成通知,最稳妥低侵入的方案是Cookie轮询法,改动极小即可实现需求:

实现步骤

  1. 前端提交表单时生成唯一随机标识,同步提交给后端,同时开启加载动画和Cookie轮询逻辑
  2. 后端处理请求时,先给响应写入携带该标识的Cookie,再返回原有的重定向逻辑
  3. 前端轮询到对应Cookie后,即可判定下载已经触发,隐藏加载动画并清理临时Cookie和定时器

代码修改示例

前端HTML调整
<!-- 新增隐藏域存储下载标识 -->
<input type="hidden" id="downloadToken" name="downloadToken" value="" />
<input 
  id="submitProcessingStandard" 
  type="submit" 
  class="btn btn-info" 
  value="PDF Report as of Date Below" 
  onclick="handleSubmit()"
/>
<!-- 你的加载GIF容器保持不变 -->
<div id="processingStandard" style="display:none;"><img src="loading.gif" alt="处理中"></div>
前端JS逻辑
// 生成随机唯一标识
function generateToken() {
  return Math.random().toString(36).slice(2) + Math.random().toString(36).slice(2);
}

// 读取指定Cookie
function getCookie(cookieName) {
  const cookieStr = `; ${document.cookie}`;
  const cookieArr = cookieStr.split(`; ${cookieName}=`);
  if (cookieArr.length === 2) return cookieArr.pop().split(';').shift();
}

// 提交处理逻辑
function handleSubmit() {
  const token = generateToken();
  $('#downloadToken').val(token);
  // 显示加载动画
  $('#processingStandard').show();
  // 每秒轮询Cookie状态
  const checkTimer = setInterval(() => {
    const completeToken = getCookie('downloadComplete');
    if (completeToken === token) {
      // 下载已触发,隐藏动画
      $('#processingStandard').hide();
      // 清理定时器和临时Cookie
      clearInterval(checkTimer);
      document.cookie = 'downloadComplete=; Path=/; Expires=Thu, 01 Jan 1970 00:00:00 GMT;';
    }
  }, 1000);
}
后端Action调整
public IActionResult PDF(CustomCrimesAndDistricts ccd, string downloadToken) {
  // 写入下载完成标识Cookie
  Response.Cookies.Append("downloadComplete", downloadToken, new CookieOptions {
      Path = "/",
      Expires = DateTimeOffset.Now.AddMinutes(1)
  });
  // 原有重定向逻辑完全不变
  return Redirect("http://xxxxxx/reportserver/Pages/ReportViewer.aspx?%2fDSP%2fDSP&rs:Format=PDF&enddate=" +
    ccd.EndDate.ToString("MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat));
}

方案说明

这个方案的兼容性极强,不会受SSRS服务跨域限制,对原有业务逻辑的改动也最小。浏览器收到后端返回的重定向响应时,会先接收Set-Cookie写入的标识,再触发下载,前端轮询到对应Cookie就可以停止加载动画,体验非常流畅。

内容的提问来源于stack exchange,提问作者Steve Cross

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:15:03