2011-05-17 14 views
6

ajax kontrol araç seti TabPanel kullanırken biraz tuhaf bir hata ile karşılaştım. Ben şöyle satırda 4 sekme vardır:Ajax Tookit TabPanel Görünmez Tag Bug

[Tab1] [Tab2] [tab3] [Tab4]

Şimdi sekmesi 2 yalnızca belirli durumlarda görünmelidir ve böylece false olarak ayarlanır görünürlüğünü vardır. Bununla birlikte, görünmezken, Sekme 3'e tıklarsak, Sekme 1'e geçmeden önce sekmeyi yükler. Benzer şekilde sekme4 seçeneği tab4'ü yükler ancak hemen sekme 3'e geçer. Sunucu tarafında ActiveTabChanged olayı iki kez vuruluyor, bir kez doğru sekme seçildiğinde, sekme için de aynı anda değişiyor.

Eğer Tab2'yi sekme sırasının sonuna taşırsam, her şey iyi çalışır. Araç kitinde biraz okumadan, bunun aktif sekme diziniyle ilgili bir hata olduğunu ve javascript'in bunu olması gerekenden daha düşük bir değere ayarladığını varsayardım, ancak bunu düzeltmeyi nasıl yapacağımı bilmiyorum.

cevap

3

Bu sorunun aynı olup olmadığından emin değilim ama birkaç aydır yaşadığıma benziyor.

Private Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender 
    'ensure that the Tabs stay invisible that have Visible=False on markup and dont get visible programmatically' 
    Me.TabThatShouldStayInvisible.Visible = False 
    FixTabPanelVisible(TabContainer1) 
End Sub 

Protected Sub FixTabPanelVisible(ByVal tabcontainer As AjaxControlToolkit.TabContainer) 
    For Each tp As AjaxControlToolkit.TabPanel In tabcontainer.Tabs 
     Dim oldVisible As Boolean = CBool(IIf(IsNothing(ViewState(tp.UniqueID + "_Display")), True, ViewState(tp.UniqueID + "_Display"))) 
     If Not tp.Visible Then 
      ViewState(tp.UniqueID + "_Display") = False 
      DisableTab(tabcontainer, tabcontainer.Tabs.IndexOf(tp)) 
     ElseIf tp.Visible AndAlso Not oldVisible Then 
      ViewState(tp.UniqueID + "_Display") = True 
      EnableTab(tabcontainer, tabcontainer.Tabs.IndexOf(tp)) 
     End If 
     tp.Visible = True 
    Next 
    Dim fixScript As New StringBuilder() 
    fixScript.Append("function DisableTab(container, index) {$get(container.get_tabs()[index].get_id() + ""_tab"").style.display = ""none"";}") 
    fixScript.Append("function EnableTab(container, index) {$get(container.get_tabs()[index].get_id() + ""_tab"").style.display = """";}") 
    ScriptManager.RegisterStartupScript(Me, Me.GetType(), "FixScriptReg", fixScript.ToString(), True) 
End Sub 

Protected Sub EnableTab(ByVal container As AjaxControlToolkit.TabContainer, ByVal index As Integer) 
    Dim sFunction As String = "function() {EnableTab($find('" & container.ClientID & "')," & index & ");}" 
    ScriptManager.RegisterStartupScript(Me, Me.GetType(), "EnableTabFun" & index, "Sys.Application.add_load(" & sFunction & ");", True) 
End Sub 

Protected Sub DisableTab(ByVal container As AjaxControlToolkit.TabContainer, ByVal index As Integer) 
    Dim sFunction As String = "function() {DisableTab($find('" & container.ClientID & "')," & index & ");}" 
    ScriptManager.RegisterStartupScript(Me, Me.GetType(), "DisableTabFun" & index, "Sys.Application.add_load(" & sFunction & ");", True) 
End Sub 
:

Ben PreRender gelen Ajax Toolkit bir Bug düzeltmek zorunda kaldı: benim sorun için buraya bir göz ve çözüm var