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

Bhu*_*van 8 .net asp.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>
Run Code Online (Sandbox Code Playgroud)

我的代码背后

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();
Run Code Online (Sandbox Code Playgroud)

May*_*hak 6

那么你的代码还可以.问题在于您Triggers使用的是哪种UpdatePanel.

微软说

所述UpdateProgress控制呈现一个<div>所显示或隐藏取决于相关联的元件是否UpdatePanel 控制已引起的asynchronous回传.对于初始页面呈现和synchronous回发,UpdateProgress 不显示控件.

查看有关MSDN的更多详细信息

所以你PostBackTrigger在你的使用中UpdatePanel会导致synchronous回发并且UpdateProgress不会显示.

<Triggers>
    <asp:PostBackTrigger ControlID="btnExport" />
    // Incorrect
</Triggers>
Run Code Online (Sandbox Code Playgroud)

将其更改为

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="btnExport" />
    // Correct
</Triggers>
Run Code Online (Sandbox Code Playgroud)

这将显示您的UpdateProgress并将按照您的期望工作.

正如您在评论中提到的那样,您也正在进行下载Grid.同样的方式你可以注册你ButtonScriptManager.这将注册您的按钮,并在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.
         }
     }
  }
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...


Bhu*_*van 1

最后,在 iframe 和 sys.webforms 的 endrequestHandler 的帮助下,我完成了这项任务。我在我的博客中解释得很清楚,请找到链接http://bhuvanram.wordpress.com/。Complete方法必须在Iframe中调用,而不是在同一页面中调用