【问题标题】:How do I force full post-back from a button within an UpdatePanel?如何强制从 UpdatePanel 中的按钮进行完整回发?
【发布时间】:2011-02-02 11:34:59
【问题描述】:

如何强制从 UpdatePanel 中的按钮进行完整回发?

【问题讨论】:

    标签: c# .net asp.net asp.net-ajax


    【解决方案1】:

    您可以使用 UpdatePanel 的 Triggers 属性来注册触发完整回发的操作。

    向该属性添加一个PostBackTrigger 对象,包含需要触发完整回发的控件的ControlID。

    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
        <ContentTemplate>
            ...
        </ContentTemplate>
        <Triggers>
            <asp:PostBackTrigger ControlID="myFullPostBackControlID" />
        </Triggers>
    </asp:UpdatePanel>
    

    【讨论】:

    • 我有一个 Infragistics UltraWebGrid,其中有一列由按钮组成。我遇到了一个问题,点击按钮会触发它们的事件处理程序,这反过来会刷新网格,但直到第二次点击,网格才会真正明显地刷新。将按钮放在 UpdatePanel 中并添加这些触发器可以解决问题。
    【解决方案2】:

    只是添加这个,因为其他人没有。无需上述任何方法,就可以在一行代码的代码隐藏中执行此操作。只需将其放入 page_load 即可:

    Visual Basic

    ScriptManager.GetCurrent(Me).RegisterPostBackControl(myButtonID)
    

    C#

    ScriptManager.GetCurrent(this).RegisterPostBackControl(myButtonID);
    

    【讨论】:

    • 非常好,经过数小时的搜索,终于找到了可行的解决方案。问题是我的所有控件(更新面板和按钮)都是在后面的代码中创建的,因此无法设置回发触发器。谢谢!
    • 你应该可以。创建控件后,您可以使用 AddHandler 为响应的子例程创建触发器
    • 完全正确,它如此简单,就在那里,我几乎感到尴尬,我从来没有想过它。不过很好..
    • 什么是“我”?不存在当前上下文错误
    • 我是页面的视觉基础。我认为在 C# 中你可以使用 thispage
    【解决方案3】:

    来自here

    使用 PostBackTrigger 控件启用 UpdatePanel 中的控件以导致回发而不是执行异步回发。

     <Triggers>
        <asp:PostBackTrigger ControlID="controlID" />
     </Triggers>
    

    【讨论】:

    • 嗯,是的,但如果在 UpdatePanel 中你有一个带有页码的 GridView,那么它将不起作用。切换到新页面,触发器不再起作用。
    【解决方案4】:

    我在 WebDataGrid 中使用 ImageButton 时遇到了同样的问题。

    我将来自 EvilDr 的 Line 放在 webdatagrid 的 preRender 中。效果很好!

    for (int i = 0; i < wdgMyData.Rows.Count; i++)
    {
       ScriptManager.GetCurrent(this).RegisterPostBackControl((ImageButton)wdgMyData.Rows[i].Items[3].FindControl("btnDownloadExcel"));
    }
    

    【讨论】:

      【解决方案5】:

      这是一个老问题,也有一些棘手的方法,当所有内容都在 更新面板 中并且您想要完整回发以便您的 Document.Ready 代码点击即可工作。

      1.在更新面板外创建一个虚拟按钮,然后像这样从后面的代码中单击它

      ScriptManager.RegisterStartupScript(Page, this.GetType(), "ResetDoc", "ResetDocumentReady();", true);
      

      2.这样定义前端的函数

      function ResetDocumentReady() {
              $("[id$=DummyButton]").click();
          }
      

      注意:但最好的方法是使用触发器,@Thibault Falise 发布的答案 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-12
        • 2010-10-23
        • 2011-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多