2011-05-17 13 views
6

He encontrado un error algo extraño al usar el kit de herramientas de control ajax TabPanel. Tengo 4 pestañas en la fila de esta manera:Ajax Tookit TabPanel Invisible Tag Bug

[Tab1] [Sep2] [Tab3] [TAB4]

Ahora ficha 2 solamente debe aparecer en ciertas circunstancias, y también lo ha hecho su visibilidad se establece en false. Sin embargo, aunque es invisible, si tuviera que hacer clic en la pestaña 3, se cargaría la pestaña antes de pasar a la pestaña 1. Del mismo modo, al seleccionar tab4 se cargará tab4 pero luego se cambiará a tab3. En el lado del servidor, el evento ActiveTabChanged es golpeado dos veces, una para la pestaña correctamente seleccionada, una vez para la pestaña que está cambiando también.

Si muevo Tab2 al final de la fila de pestañas, todo funciona bien. Después de haber leído un poco sobre el kit de herramientas, supongo que se trata de un error relacionado con el índice de pestañas activas, y el javascript lo establece en uno más bajo de lo que debería, pero no estoy seguro de cómo solucionarlo.

Respuesta

3

No estoy seguro de si este es el mismo problema pero suena similar a uno que he tenido durante algunos meses. Echar un vistazo aquí para mi problema y la solución:

que tenía que corregir un error en Ajax-Kit de herramientas de PreRender:

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