从Child UpdatePanel更新父UpdatePanel - 有条件地

时间:2010-08-17 19:23:21

标签: asp.net vb.net updatepanel nested

我正在尝试设置updatepanel以每X秒更新一次,问题是我不希望控件实际刷新,除非有新数据。所以我目前在父UpdatePanel中有一个子更新面板,子更新面板由计时器刷新。但我似乎找不到触发父面板更​​新的方法。同样,只有在满足某些条件(数据已更改)时才会这样做。

示例代码:

<asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="10000"></asp:Timer>
<asp:updatepanel id="upParent" runat="server" UpdateMode="Conditional">
    <ContentTemplate>    
        <asp:Label id="lblParenttime" Runat="server">Parent Time Here</asp:Label>     
        <asp:updatepanel id="upChild" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Label id="lblChildtime" Runat="server">Child Time Here</asp:Label>
            </ContentTemplate>
            <triggers>
                <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
            </triggers> 
        </asp:updatepanel>  
    </ContentTemplate>
</asp:updatepanel>  

Protected Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
   lblChildtime.Text = Now.Tostring
   if X = Y then
       'Cause Parent to Update
       lblParenttime.Text = Now.Tostring
   end if     
End Sub

2 个答案:

答案 0 :(得分:0)

使用以下javascript代码UpdatePanel刷新时,您可以触发一些javascript:

var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_pageLoaded(YourJavascriptFunctionNameHere);

然后,您可以在另一个UpdatePanel上放置一个隐藏按钮,并从您挂钩到__DoPostBack重新加载的javascript函数中手动调用UpdatePanel

关于如何在您的方案中使用add_pageLoaded,可能还有其他想法,但这至少应该让您走上正确的轨道。

答案 1 :(得分:0)

在满足条件时,您是否在Timer1_Tick事件中尝试过upParent.Update()