Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Asp:赢得进展';从ashx文件下载文件时,t结束操作_Asp.net_Updatepanel_Updateprogress - Fatal编程技术网

Asp.net Asp:赢得进展';从ashx文件下载文件时,t结束操作

Asp.net Asp:赢得进展';从ashx文件下载文件时,t结束操作,asp.net,updatepanel,updateprogress,Asp.net,Updatepanel,Updateprogress,我试图使用asp:progress,所以当我点击我的asp:button时,它会调用一个ashx文件,该文件会写入CSV响应 到目前为止,当我点击按钮,动画显示正确,下载开始。但是,当文件开始下载时(当我从ashx文件得到响应时),我似乎无法停止动画 以下是aspx: <asp:Content ID="Content2" ContentPlaceHolderID="MainPlaceHolder" runat="server"> <asp:ScriptManager ID="

我试图使用asp:progress,所以当我点击我的asp:button时,它会调用一个ashx文件,该文件会写入CSV响应

到目前为止,当我点击按钮,动画显示正确,下载开始。但是,当文件开始下载时(当我从ashx文件得到响应时),我似乎无法停止动画

以下是aspx:

<asp:Content ID="Content2" ContentPlaceHolderID="MainPlaceHolder" runat="server">
 <asp:ScriptManager ID="ScriptManager1" runat="server" />
    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
        <ContentTemplate>
            <p>Download a CSV file</p>
            <asp:Button ID="Button2" runat="server" Text="Download" 
            CausesValidation="False" onclick="Button2_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>

    <asp:UpdateProgress ID="UpdateProgress1"  AssociatedUpdatePanelID="UpdatePanel1" runat="server">
        <ProgressTemplate>
            <div id="AlertDiv" style="background:White">
                <asp:Image ID="imgLoading" runat="server" ImageUrl="css/smoothness/images/animated-overlay.gif" Width="34px" />Loading...
            </div>
        </ProgressTemplate>
    </asp:UpdateProgress>
</asp:Content>
下面是ashx文件中的ProcessRequest函数:

public void ProcessRequest(HttpContext context)
{
    string attachment = String.Format("attachment; filename=Hierarchie des produits au {0}.csv", DateTime.Today.ToShortDateString());
    context.Response.AddHeader("content-disposition", attachment);
    context.Response.ContentType = "text/csv";
    context.Response.AddHeader("Pragma", "public");
    context.Response.ContentEncoding = Encoding.GetEncoding(1252);
    context.Response.Write(DemandeTarifImageBLL.DataTableToCSVString());
}
我曾尝试使用javascript和PageRequestManager类的属性endRequest、beginRequest和initializeRequest事件(我找到了一些conde代码片段),但到目前为止没有任何效果


下载开始时,我如何强制动画停止?

虽然我无法尝试查看它是否工作,但根据我以前的经验,我可以提出以下建议。尝试按以下方式更改代码:

public void ProcessRequest(HttpContext context)
{
    string attachment = String.Format("attachment; filename=Hierarchie des produits au {0}.csv",        
    DateTime.Today.ToShortDateString());
    context.Response.AddHeader("content-disposition", attachment);
    context.Response.ContentType = "text/csv";
    context.Response.AddHeader("Pragma", "public");
    context.Response.ContentEncoding = Encoding.GetEncoding(1252);
    context.Response.Write(DemandeTarifImageBLL.DataTableToCSVString());
    context.Response.Flush();
    context.Response.End();
}
添加Flush和End将清除缓冲区并分别标记响应结束。这样,客户机将得出一个明确的结论,即请求已被完全处理

您还可以使用客户端脚本控制更新进度,以下是示例代码:

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(EndRequest);

function EndRequest(sender, args) {
            if (postBackElement.id == 'Panel1Trigger') {
                $get('UpdateProgress1').style.display = 'none';
            }
        }
上面的js代码为update panels end request事件添加了一个处理程序,并在函数上关闭更新进度

尝试将处理程序的ProcessRequest函数的内容放入button click事件,并记住为响应添加Flush()和End函数

编辑1:

在进一步查看stack overflow时,我发现以下与您的问题类似的链接,这证实了我的假设,即您不能在更新面板中进行重定向:


希望这有帮助。

尝试从javascript重定向到ashx

ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "downloadFileExport", "javascript:window.location ='" + ResolveUrl(downloadUrl) + "';", true)

这也解决了我的问题。

在我的ASP.Net Web表单应用程序中,即使进程完成,进度文本仍会持续显示。我能够在开发环境中通过增加ScriptManager中的超时来解决这个问题。下面的例子


不幸的是,这并没有改变结果。动画开始>下载开始>下载完成后动画仍保留我已更新我的答案,我认为这将解决您的问题。这是我尝试过的事情之一,但我不明白为什么EndRequest似乎从未被调用(我在其中放置了一个从未弹出的警报)。我觉得response.redirect应该在客户端结束javascript的执行,但我无法克服这个问题。您应该尝试将您的句柄的ProcessRequest函数的内容放到按钮单击事件中。记住为响应添加Flush()和End函数。你尝试过我建议的更改吗?@ShashankChaturvedi是的,到目前为止运气不好。我忍不住认为这是因为响应而发生的。单击按钮重定向激发。您是否尝试将ProcessRequest(ProcessRequest处理程序的功能)的内容移动到按钮单击(并删除响应.重定向)。我已更新了我的答案,请参考相同的答案。
ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "downloadFileExport", "javascript:window.location ='" + ResolveUrl(downloadUrl) + "';", true)