在我的项目中,我需要在“页面加载”事件中显示一个进度栏。
基本上,我从另一个应用程序中得到了要求。根据要求
我的页面将创建一个pdf文件。由于创建pdf文件需要时间
创建页面时,我需要显示进度条或动画gif图像。
任何想法如何做到这一点。记住,我在这里没有使用任何button_click事件。
参考方案
我想象这样的事情可以工作:
通过调用如下函数在document.ready上显示gif图像:
function ShowProgressBar(booleanValue)
{ if(booleanValue)
$('#elementcontaingimage').show('slow');
else
$('#elementcontaingimage').hide('slow');
}
使用true
参数:ShowProgressBar(true);
在生成PDF之后;只需致电:
ClientScriptManager cs = Page.ClientScript;
cs.RegisterClientScriptBlock(this.GetType(), "key", "ShowProgressBar(false);", false);
但是我觉得它不会那么简单:S
更新-工作示例
我想出了一种使其工作的方法,但是您需要将生成PDF的代码分离到另一个页面中,该页面的唯一目的是将PDF文件写入响应流。更好的是,您可以编写一个HttpHandler来将PDF文件写入响应流,但是出于本示例的目的,我将从常规的aspx页面编写PDF文件。
第1步:在页面中插入以下标记和javascript代码。
<div id="imageDiv">
<img alt="" src="images/ajax-loader.gif" />
</div>
<script language="javascript" type="text/javascript">
function ShowProgressBar(booleanValue) {
if (booleanValue) {
$('#imageDiv').show('slow');
createIframe();
}
else
$('#imageDiv').hide('slow');
}
function callback(parent) {
ShowProgressBar(false);
}
function createIframe() {
$('<iframe />', {
name: 'myFrame',
id: 'myFrame',
src: 'PageGeneratingPDF.aspx',
style: 'display:none;'
}).appendTo('body').load(function () {
callback(this);
});
}
window.onload = ShowProgressBar(true);
</script>
说明:在页面加载时,将调用ShowProgressBar以开始显示动画gif图像。下一行-createIframe();-
动态创建一个iframe
并将src
属性设置为将PDF写入响应流的页面的URL。然后,它将iframe
附加到页面body
上,并附加一个callback
函数,该函数将在iframe
完成加载时被调用。因为callback
函数在PageGeneratingPDF.aspx
完成生成PDF文件时被调用,所以callback
函数要做的唯一事情就是隐藏包含动画gif图像的div。
后面的PageGeneratingPDF.aspx
代码如下所示:
protected void Page_Load(object sender, EventArgs e)
{
Thread.Sleep(10000);//Give the sensation that the pdf file takes long to generate
//replace line below with actual code that generates the PDF file
byte[] pdf = File.ReadAllBytes(Server.MapPath(@"~/file.pdf"));
Response.AddHeader("Content-disposition", "attachment; filename=report.pdf");
Response.ContentType = "application/octet-stream";
Response.BinaryWrite(pdf);
Response.Flush();
Response.End();
}
大功告成输出将是这样的。
原来...
生成PDF后...
StackOverflow中的This other question很有帮助。
如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…
Mongo抛出“元素名称'名称'无效”异常 - c#我正在更新一个简单的字段。var filterDocument = new BsonDocument { { "name", "alice" } }; var newDocument = new BsonDocument { { "name", "Alice" } }; coll…
T-SQL等价的正则表达式'\ b' - c#我正在将利用regex的CLR函数转换为SQL函数。我知道SQL Server并不完全支持正则表达式,但是我只需要一种情况就可以搜索单词。搜索字段值:{"Id":1234, "Title": "The quick brown"}.NET中的正则表达式模式:'\b' + '…
将字符串分配给numpy.zeros数组[重复] - pythonThis question already has answers here: Weird behaviour initializing a numpy array of string data (4个答案) …
您如何在列表内部调用一个字符串位置? - python我一直在做迷宫游戏。我首先决定制作一个迷你教程。游戏开发才刚刚开始,现在我正在尝试使其向上发展。我正在尝试更改PlayerAre变量,但是它不起作用。我试过放在列表内和列表外。maze = ["o","*","*","*","*","*",…