2011-07-05 14 views
1

私は部分的なポストバック間にロードするのに時間がかかり、updatePanelAnimationExtenderを配置してupdatePanelをフェードインまたはフェードアウトさせるページを持っています。サンプル:Asp.net Ajax Single UpdatePanel + AnimationExtender + HIstory = OnUpdatedアニメーションなし

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

を取得するページが最初にロードの後ろ

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> 

コードボタン12

そして、フェードインとフェードアウトが正しく行われます。履歴情報を含むURLを取得して新しいタブにロードしようとすると、Button 12は正しく表示されますが、フェードアウトされたままです。私は、最初に読み込まれたページを参照して部分ポストバックが発生した場合にのみ、OnUpdatedが実行されると言う人がいると聞いていました。私は推測していますそれは決して退屈になるので、歴史によってロードするときにpartialpostbackを偽造していないと推測しています。

私はちょうど私が見つけることができたか、または私はいくつかのジャバスクリプトを注入手動でフェードインを呼び出す?この問題は、私がそこに助けを求めることがほとんどないと思えるほど簡単です。

ありがとうございました

+0

私はまた、javascriptでそれを行う上でのヒントを取るでしょう。 $(document).readyとSys.WebForms.PageRequestManager.getInstance()で修正しようとしました。add_endRequest(EndRequestHandler);アニメーションが行われる前にすべて実行されます。 – jheizer

答えて

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> 
+0

良い解決策ですが、どのUpdatePanel(私のページにいくつかのUpdatePanelがあります)がどのように更新されているかを知る方法は分かっていますか? – BigMan

関連する問題