【问题标题】:Asp.net Ajax Single UpdatePanel + AnimationExtender + HIstory = No OnUpdated AnimationAsp.net Ajax Single UpdatePanel + AnimationExtender + HIstory = No OnUpdated Animation
【发布时间】:2011-07-05 22:43:01
【问题描述】:

我有一个页面需要一段时间才能在部分回发之间加载,并放置了一个 UpdatePanelAnimationExtender 来淡入和淡出更新面板。示例:

aspx

       <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always"  >
        <ContentTemplate>
            <asp:Button ID="testbtn" runat="server" Text="test" />
        </ContentTemplate>
     </asp:UpdatePanel>

    <ajaxToolkit:UpdatePanelAnimationExtender ID="UpdatePanelAnimations" runat="server" TargetControlID="UpdatePanel1">
      <Animations>
        <OnUpdating> 
            <FadeOut Duration="0.2" Fps="20" minimumOpacity=".3" />
         </OnUpdating>
        <OnUpdated>
            <FadeIn Duration="0.2" Fps="20" minimumOpacity=".3"/>
        </OnUpdated>
    </Animations>
</ajaxToolkit:UpdatePanelAnimationExtender>

代码背后

Private Sub testpage_Init(sender As Object, e As System.EventArgs) Handles Me.Init
    UpdatePanel1.ContentTemplateContainer.Controls.Add(New LiteralControl("1")) 'Show the init ran
End Sub

Private Sub btn_Click(sender As Object, e As System.EventArgs) Handles testbtn.Click
    ScriptManager.GetCurrent(Me.Page).AddHistoryPoint("2", "2", "2") 'Save Event
    UpdatePanel1.ContentTemplateContainer.Controls.Add(New LiteralControl("2")) 'Display event
End Sub

Private Sub sm1_Navigate(sender As Object, e As System.Web.UI.HistoryEventArgs) Handles sm1.Navigate
    Dim State As String = ""
    If e.State.HasKeys Then
        State = e.State.Item(0)
    End If
    UpdatePanel1.ContentTemplateContainer.Controls.Add(New LiteralControl(State)) '"Reload" event
End Sub

当页面第一次加载时,你会得到 按钮 1

当您单击按钮时,它会保存状态并显示 按钮 12

它可以正确地淡入淡出。如果您获取带有历史信息的 URL 并尝试将其加载到新选项卡中,则 Button 12 会正确显示,但仍会淡出。我听说有人说 OnUpdated 只会在第一次加载页面时发生部分回发时运行。我猜它不会在按历史加载时伪造部分回发,因此它永远不会淡入。

我的问题是有一种干净的方法来解决这个我刚刚能够找到的问题,还是我坚持注入一些 javascript 来手动调用淡入淡出?因为这个问题看起来很简单,但我几乎找不到任何帮助。

谢谢

【问题讨论】:

  • 好吧,我还将介绍通过 javascript 进行操作的技巧。我尝试在 $(document).ready 和 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 中更正它并且它们都在动画发生之前运行。

标签: asp.net ajax vb.net animationextender


【解决方案1】:

我终于明白了。我在OnUpdating 端添加了一个条件,以检查初始化部分回发的控件是否是脚本管理器。如果是这样,请不要淡出。

 <ajaxToolkit:UpdatePanelAnimationExtender ID="UpdatePanelAnimations" BehaviorID="animationpanel" runat="server" TargetControlID="UpdatePanel1">
    <Animations>
        <OnUpdating> 
            <Condition ConditionScript="(theForm.__EVENTTARGET.value != 'ctl00$sm1');">
                <FadeOut Duration="0.15" Fps="20" minimumOpacity=".3" />
            </Condition>
         </OnUpdating>
        <OnUpdated>
            <FadeIn Duration="0.15" Fps="20" minimumOpacity=".3" />
        </OnUpdated>
    </Animations>
</ajaxToolkit:UpdatePanelAnimationExtender>

【讨论】:

  • 很好的解决方案,但也许您知道如何找出正在更新的 UpdatePanel(我的页面上有几个 UpdatePanel)?
猜你喜欢
  • 1970-01-01
  • 2010-12-29
  • 2010-09-14
  • 2011-03-25
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多