更新面板PostBackTrigger,更新进度不显示

时间:2014-03-05 07:08:32

标签: asp.net .net updatepanel

我有一个更新面板并使用PostBackTrigger事件更新进度。但是当我点击按钮时,没有显示更新进度。请找到以下示例代码

<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="updatepanelDropDownTaskType" CssClass="Token-setup-popup" DynamicLayout="true">
    <ProgressTemplate>
        <div id="loading" class="loading">
            <asp:Image runat="server" ID="imgBusyIndicator" ImageUrl="~/images/busy-indicator.gif" />
        </div>
    </ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="updatepanelDropDownTaskType" runat="server" UpdateMode="Conditional"> 
    <Triggers>
        <asp:PostBackTrigger ControlID="btnExport" />
    </Triggers>
    <ContentTemplate>     
            <asp:Button ID="btnExport" runat="server" Text="Export To CSV"  CssClass="button" CausesValidation="true" onclick="btnExport_Click" ClientIDMode="Static"/></asp:Button>
    </ContentTemplate>
</asp:UpdatePanel>

我的代码

HttpResponse Response = System.Web.HttpContext.Current.Response;
        Response.ClearHeaders();
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName);
        Response.ContentType = FileType;
        Response.Write(content);
        HttpContext.Current.ApplicationInstance.CompleteRequest();

3 个答案:

答案 0 :(得分:6)

那么你的代码是好的。问题与您在Triggers中使用的UpdatePanel有关。

微软说

  

UpdateProgress控件呈现<div>元素   显示或隐藏,具体取决于是否关联UpdatePanel   控件已导致 asynchronous回发。对于初始页面   渲染和synchronous回发UpdateProgress   控件未显示。

查看 MSDN

的详细信息

因此,您在PostBackTrigger中使用UpdatePanel会导致synchronous回发,并且UpdateProgress将不会显示。

<Triggers>
    <asp:PostBackTrigger ControlID="btnExport" />
    // Incorrect
</Triggers>

将其更改为

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="btnExport" />
    // Correct
</Triggers>

这将显示您的UpdateProgress并将按照您的预期运作。

正如您在评论中提到的那样,您正在Grid上进行下载。您也可以使用Button注册ScriptManager。这将注册您的按钮,并在asynchronous回发时显示下载按钮。

 protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
 {    
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
         Button btnExport = e.item.FindControl("btnExport") as Button;
         if (btnExport != null)
         {
             ((ScriptManager)this.Page.Master.FindControl("ID of your Script manager")).RegisterPostBackControl(downloadDocColumn);
             // In Above line i assumed Script Manager is placed on Your master page.
         }
     }
  }

希望这会有所帮助......

答案 1 :(得分:1)

我写了一个“Ajaxable Panel”(在博客文章中解释的术语),可能对您的场景有所帮助。

http://leftyftw.wordpress.com/2011/10/01/an-ajaxable-panel/

它面向SharePoint,但在这里完全适用。

答案 2 :(得分:0)

尝试将以下内容添加到system.web

下的web.config文件中
<xhtmlConformance mode="Transitional"/>

如果代码完美,它可能会解决您的问题。 如果能解决你的问题,请选择回答。