【问题标题】:Update Panel PostBackTrigger, Update Progress not displaying更新面板 PostBackTrigger,不显示更新进度
【发布时间】:2014-03-05 07:08:31
【问题描述】:

我有一个更新面板并使用 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();

【问题讨论】:

  • 解决方案参考此链接forums.asp.net/t/…
  • 我终于得到了答案。我会在几分钟后在这里发布更新的代码..

标签: asp.net .net updatepanel


【解决方案1】:

你的代码没问题。问题在于您在UpdatePanel 中使用的Triggers

微软说

UpdateProgress 控件呈现一个 &lt;div&gt; 元素,该元素是 显示或隐藏取决于关联的UpdatePanel 控制已导致 asynchronous 回发。对于初始页面 渲染和synchronous 回发UpdateProgress 控件不显示。

MSDN

上查看更多详情

所以你在你的UpdatePanel 中使用了PostBackTrigger,这将导致synchronous 回发和UpdateProgress 不会出现。

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

改成

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

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

正如您在 cmets 中提到的,您也在 Grid 上执行下载。同样的方式你可以用ScriptManager注册你的Button。这将注册您的按钮并在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.
         }
     }
  }

希望这会有所帮助...

【讨论】:

  • 嗨 Mayank,感谢您的描述。我通过包含后面的代码更新了我的任务。所以由于 HttpResponse 我需要做完整的回帖。因此,如果我使用 Async Post back 我的导出到 excel 将无法正常工作... :(
  • 我遇到的异常是“无法通过 RegisterAsyncPostBackControl 和 RegisterPostBackControl 注册 ID 为 'btnExport' 的控件。如果与目标控件关联的触发器有冲突,则可能发生这种情况。”
  • 您能否尝试在btnExport 上添加System.Threading.Thread.Sleep(3000); 点击...让我知道它是否有效..
  • 我对 Jqeury 进行了同样的尝试,但由于调用服务器失败而出现错误
  • 并根据您后面的代码,您正在将按钮注册为 postbackcontrol,但这里我已经在 updatepanel 设计中定义了 postbacktrigger。那么你认为你的代码解决了这个问题吗?
【解决方案2】:

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

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

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

【讨论】:

  • 嗨杰米托雷斯。实际上,当用户单击“导出到 excel”按钮时,我需要显示进度。导出到 excel 在更新面板中不起作用。所以我将按钮移到了 UpdatePanel 之外,但现在我被困住了。如何显示完整回发按钮的更新进度..
  • AjaxablePanel 在后端处理请求时如何处理。但是,如果您的代码无法使用 UpdatePanel(为什么会这样?),您将不得不创建自定义解决方案,因为完整回发有效地报告了您的状态。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    尝试将以下内容添加到 system.web 下的 web.config 文件中

    <xhtmlConformance mode="Transitional"/>
    

    如果代码完美,它可能会解决您的问题。 如果它解决了您的问题,请投票作为答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 2017-06-08
      • 2020-10-19
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多