在页面加载事件中显示Ajax进度栏 - c#

在我的项目中,我需要在“页面加载”事件中显示一个进度栏。
基本上,我从另一个应用程序中得到了要求。根据要求
我的页面将创建一个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数组[重复] - python

This question already has answers here: Weird behaviour initializing a numpy array of string data                                                                    (4个答案)         …

您如何在列表内部调用一个字符串位置? - python

我一直在做迷宫游戏。我首先决定制作一个迷你教程。游戏开发才刚刚开始,现在我正在尝试使其向上发展。我正在尝试更改PlayerAre变量,但是它不起作用。我试过放在列表内和列表外。maze = ["o","*","*","*","*","*",…