提问人:snoopy 提问时间:6/1/2017 最后编辑:snoopy 更新时间:2/3/2018 访问量:1449
报表加载时的 ReportViewerForMvc 事件
ReportViewerForMvc event on report load
问:
我正在使用 ReportViewerForMvc 在 iframe 中加载报表。目前,我有一个微调器,以便用户知道报告正在加载。但是,当 iframe 放置在页面上时,微调器停止旋转......当报表内容呈现完成时,则不然。我发现有人将 isLoading 与 $find 一起使用,但我很确定这仅适用于 asp,我需要我的在 .Net 中
让微调器继续旋转直到报表加载到 iframe 中的最简单方法是什么?
目前,我有一个共享视图,用于所有我希望添加一些 javascript 的报告:
@using ReportViewerForMvc;
<div id="reportViewer">@Html.ReportViewer(Model.ReportViewer as Microsoft.Reporting.WebForms.ReportViewer)</div>
答:
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
我添加了有助于了解在哪里和做什么的片段。如果实现此操作有问题,请告诉我。
评论