报表加载时的 ReportViewerForMvc 事件

ReportViewerForMvc event on report load

提问人:snoopy 提问时间:6/1/2017 最后编辑:snoopy 更新时间:2/3/2018 访问量:1449

问:

我正在使用 ReportViewerForMvc 在 iframe 中加载报表。目前,我有一个微调器,以便用户知道报告正在加载。但是,当 iframe 放置在页面上时,微调器停止旋转......当报表内容呈现完成时,则不然。我发现有人将 isLoading 与 $find 一起使用,但我很确定这仅适用于 asp,我需要我的在 .Net 中

让微调器继续旋转直到报表加载到 iframe 中的最简单方法是什么?

目前,我有一个共享视图,用于所有我希望添加一些 javascript 的报告:

@using ReportViewerForMvc;

<div id="reportViewer">@Html.ReportViewer(Model.ReportViewer as Microsoft.Reporting.WebForms.ReportViewer)</div>
iframe 报告服务 Web窗体 ReportViewer 客户端

评论

0赞 Sebastian 10/26/2017
github.com/armanio123/ReportViewerForMvc/issues/3 请看一下这个

答:

0赞 rmehra76 2/2/2018 #1

iframe onload 无法在此处停止微调器。您需要 cookie 和客户端脚本来实现此目的。 服务器代码将在 cookie 中设置值。呈现报告后,将在客户端 (cshtml) 读取值,并且可以停止微调器。

阅读这篇文章。在这里,您可以用微调器替换阻挡器。

http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser/

   //This should be called on the event when you are loading the report 
   //In your case you will route the url to controller or invoke the link 
   //for the report 

 $(document).ready(function () {
 $('#create_pdf_form').submit(function () {
  blockUIForDownload();
});

});

//This is where you will place the spinner
function blockUIForDownload() {
 var token = new Date().getTime(); 
  //use the current timestamp as the token value
  $('#download_token_value_id').val(token);
  $.blockUI();
  fileDownloadCheckTimer = window.setInterval(function () {
   var cookieValue = $.cookie('fileDownloadToken');
   if (cookieValue == token)
     finishDownload();
   }, 1000);
}
 //This will read the token generated from the server side controller or 
 //aspx.cs or ashx handler
 function finishDownload() {
    window.clearInterval(fileDownloadCheckTimer);
    // $.removeCookie('fileDownloadToken'); //clears this cookie value
    //$.cookie('fileDownloadToken', null);
    //$.removeCookie("fileDownloadToken");
    setCookie("fileDownloadToken", '2')
    $.unblockUI();
}


//On the server side set the token , it could be controller or ashx handler
  var response = HttpContext.Current.Response;
  response.Clear();
   response.AppendCookie(new HttpCookie("fileDownloadToken", 
 downloadTokenValue); //downloadTokenValue will have been provided in the 
 form submit via the hidden input field

  response.Flush();

  //Lastly don't forget to add these source js files.
  <script src="~/Scripts/jquery-1.5.1.js"></script>
  <script src="~/Scripts/jquery.blockUI.js"></script>
  <script src="~/Scripts/jquery.cookie.js"></script>

评论

0赞 Sunil 2/3/2018
请在此处包含链接中的相关部分。
0赞 rmehra76 2/3/2018
我添加了有助于了解在哪里和做什么的片段。如果实现此操作有问题,请告诉我。