2014-03-13 75 views
0

我对页面中的许多UpdatePanel有一个Ajax UpdateProgress。其中一个updatepanel的gridview有一个下载按钮。一旦用户点击按钮,“等待”图像就会显示出来,但即使在下载完成后也会一直显示。如何隐藏UpdateProgress图片

一旦下载完成,我应该如何隐藏它。

ASPX:

<asp:UpdateProgress Id="UpdateProgress1" runat="server" DisplayAter="1"> 
    <ProgressTemplate> 
     <asp:Image id="imgWait" runat="server" ImageUrl="~/Images/wait.gif"/> 
    </ProgressTemplate> 
</asp:UpdateProgress> 

JS:

function HideImage() 
{ 
    $(#imgWait).hide(); 
} 
//Also tried 
//Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 

//function EndRequestHandler(sender, args) 
//{ 
// document.getElementById('<%=imgWait.ClientID%>').className = 'hidden'; 
//} 

代码背后:

protected void Download(object sender, CommandEventArgs e) 
{ 
    string sFile = e.CommandArgument.ToString(); 
    Response.Redirect("Download.Aspx?file="+sFile,false); 
    ScriptManager.RegisterStartupScript(this.Page,this.GetType(), 
            "script","HideImage();",true); 
} 

Download.Aspx

page_load() 
{ 
    if(!string.IsNullOrEmpty(Request.QueryString["file"])) 
    { 
     string path = Server.MapPath(Request.QueryString["file"]); 
     System.IO.FileInfo file = new System.IO.FileInfo(path); 
     if (file.Exists) 
     { 
      Response.Clear(); 
      Response.AddHeader("Content-Disposition", "attachment; filename=" + 
           file.Name); 
      Response.AddHeader("Content-Length", file.Length.ToString()); 
      Response.ContentType = "application/octet-stream"; 
      Response.WriteFile(file.FullName); 
      Response.Flush(); 
      Response.End(); 
     } 
    } 
} 

回答

2

您将会重定向到该下载文件,我觉得屏幕并没有真正在这种情况下更新页面,因此图像停留。

你既可以使同一页上的文件下载或使通过脚本重定向回传后:

protected void Download(object sender, CommandEventArgs e) 
{ 
    string sFile = e.CommandArgument.ToString(); 
    string script = "location.href='Download.Aspx?file=" + sFile + "';"; 
    ScriptManager.RegisterStartupScript(this.Page,this.GetType(), 
            "script",script,true); 
} 

在这种情况下,“HideImage()”不需要脚本,作为回传可能会成功完成。

+0

编译器根本没有进入下载页面。所以,我把相同的代码放在'download()'中。它说,Native框架位于调用栈之上。如果这是错误的,你可以告诉,如何在同一页面上下载? – Ruby

+0

'string script'行出现错误,我更新了答案,试试看。 –

+0

工作,但出现了一个新问题。 gridview有2列查看,删除,并且都有图标的所有行。当我点击任意行的视图图标后,它会下载文件,但是,在文件下载完成后,网格中的所有图标都会消失。尽管如此,我仍然可以下载单击该空白区域的文件。 – Ruby