4

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

这可能吗?

编辑:

澄清一下,我在一个用户控件中有一个更新面板,其他更新面板在其他用户控件中,所以除非我要公开一些自定义属性并使用 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 转换为 currentpage 并调用 Update。

编辑:

啊啊啊啊!

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

4

5 回答 5

3

注册一个 PostBackTrigger(而不是 AsyncPostBackTrigger)会在特定事件触发时刷新每个面板怎么样。

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

于 2008-09-10T20:52:30.530 回答
2

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

于 2008-09-10T20:52:11.950 回答
0

如果您想从客户端 Javascript刷新 updatepanel,这是一个很好的技术。

于 2008-09-10T20:54:54.267 回答
0

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

于 2008-09-10T22:36:54.053 回答
0

将两个视图面板实例化为第三个演示者类,然后让演示者类控制两个视图。例如:

例如,您可以忽略您需要“中产阶级”来完成其工作的内容,例如,您可以拥有;

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

每个视图都有自己的控件。有很多不同的方法可以做到这一点.. 或者,您可以使用中间类来实例化两个面板,然后在每个面板中,您可以使用“获取方法”来检索数据进行处理。

于 2014-05-16T14:46:33.487 回答