刷新页面上的所有更新面板?

时间:2020-03-05 18:51:04  来源:igfitidea点击:

我有一些代码可以修改其他更新面板中的多个控件绑定到的值。当该事件处理程序触发时,我希望它也强制其他更新面板刷新,以便它们可以重新绑定。

这可能吗?

编辑:

为了澄清起见,我在一个用户控件中有一个更新面板,其他更新面板在其他用户控件中,因此除非我要公开一些自定义属性并使用findControl等,否则它们彼此看不到。

再次编辑:

这是我想出的:

public void Update()
{
    recursiveUpdate(this); 
}

private void recursiveUpdate(Control control)
{
    foreach (Control c in control.Controls)
    {
        if (c is UpdatePanel)
        {
            ((UpdatePanel)c).Update();
        }

        if (c.HasControls())
        {
            recursiveUpdate(c);
        }
    }
}

我有3个主要的用户控件,其中充满了更新面板,这些控件对主页可见,因此我在其中添加了一个Update方法,在这三个控件上称为Update。

在我的触发控件中,我只是将this.Page转换为当前页面并称为Update。

编辑:

AARRGGGG!

更新面板刷新时,它不会在它们的子控件中调用Page_Load ...我现在该怎么办!

解决方案

回答

我们可以在要更新的更新面板中的事件上设置触发器,也可以在后面的代码中明确地说出updatepanel.update()。

回答

注册一个将触发特定事件时刷新每个面板的PostBackTrigger(而不是AsyncPostBackTrigger),该怎么办?

或者将已经刷新某些UpdatePanels的触发器添加到其他UpdatePanels中。

回答

如果要从客户端Javascript刷新updatepanel,这是一种好方法。

回答

Page.DataBind()在所有子控件上启动一轮数据绑定。这将导致Asp.Net重新评估每个控件上的绑定表达式。如果这还不够,则可以添加任何想要确保在用户控件中的OnDataBinding或者OnDataBound重写中启动的逻辑。例如,如果我们需要重新执行Page_Load事件,则可以在覆盖的OnDataBound方法中简单地调用它。