刷新页面上的所有更新面板?
时间: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方法中简单地调用它。