如何从UpdatePanel中的按钮强制完全回发?


Answers:


89

您可以使用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中并添加这些触发器即可解决此问题。
tsilb

49

仅添加此内容是因为没有其他人拥有。无需任何上述方法,就可以在一行代码的代码隐藏中完成此操作。只需将其放在page_load中:

Visual Basic

ScriptManager.GetCurrent(Me).RegisterPostBackControl(myButtonID)

C#

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

3
非常好,经过数小时的搜索,终于找到了可行的解决方案。问题是我的所有控件(更新面板和按钮)都是在后面的代码中创建的,因此无法设置postbacktrigger。谢谢!
OverMars 2012年

2
你应该能够。创建控件后,可以使用AddHandler创建响应子例程的触发器
EvilDr

绝对正确,它是如此的简单和正确,令我几乎为难的是它从未发生过。不过非常好..
OverMars 2012年

什么是“我”?当前上下文错误中不存在
Fandango68年

2
我是该页面的视觉基础。我想在C#中,你可以使用thispage
EvilDr

13

这里

使用PostBackTrigger控件可以启用UpdatePanel内部的控件以引起回发而不是执行异步回发。

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

嗯,是的,但是如果在该UpdatePanel中您有带有页码的GridView,则将无法使用。切换到新页面,触发器将不再起作用。
Fandango68

0

我在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"));
}

0

这是一个古老的问题,当所有内容都在更新面板中并且您想要进行完整回发以使您的Document.Ready 代码在单击时起作用时,也有一些棘手的方法。

1.在更新面板外创建一个虚拟按钮,然后从后面的代码中单击它,如下所示

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

2.像这样在前端定义功能

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.