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

时间:2008-09-10 20:39:21

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

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

这可能吗?

编辑:

为了澄清,我在一个用户控件中有一个更新面板,其他更新面板在其他用户控件中,因此除非我公开一些自定义属性并使用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 ...我现在该怎么做!

5 个答案:

答案 0 :(得分:3)

如何在特定事件触发时注册将刷新每个面板的PostBackTrigger(而不是AsyncPostBackTrigger)。

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

如果您想从client side Javascript刷新更新面板,这是一种很好的技巧。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

将两个视图面板即时连接到第三个演示者类,然后让演示者类控制两个视图。例如:

你可以把你需要的东西传给中产阶级'为了完成它的工作,例如,你可以拥有;

PresenterClass.AttachInterface(mIOrder);
PresenterClass.DoSomeCalulation();
PresenterClass.drawPanel(1);
PresenterClass.AttachInterface(mIOtherOrder);
PresenterClass.DoSomeCalulation();
PresenterClass.drawPanel(2);

每个视图都有自己的控件。这么多不同的方法你可以做到这一点..替代地,你可以使用中产阶级来快速完成你的面板然后在你的每个面板中你可以获得方法'检索要处理的数据。