Ajax Tookit TabPanel Невидимая ошибка тега - PullRequest
6 голосов
/ 17 мая 2011

Я столкнулся с несколько странной ошибкой при использовании набора инструментов управления ajax TabPanel. У меня есть 4 вкладки в строке, как это:

[Tab1] [Таб2] [TAB3] [tab4]

Теперь вкладка 2 должна появляться только при определенных обстоятельствах, поэтому для ее видимости установлено значение false. Однако, несмотря на то, что он невидим, если бы я нажал на Tab 3, он бы загрузил вкладку перед переключением на Tab 1. Аналогичным образом, выбор tab4 загрузит tab4, но затем сразу переключится на tab3. На стороне сервера событие ActiveTabChanged запускается дважды: один раз для правильно выбранной вкладки, один раз для вкладки, которую он тоже переключает.

Если переместить Tab2 в конец ряда вкладок, все работает нормально. Немного ознакомившись с инструментарием, я полагаю, что это ошибка, связанная с индексом активной вкладки, и javascript устанавливает его на единицу ниже, чем следует, но я не уверен, как его исправить.

1 Ответ

3 голосов
/ 10 июня 2011

Я не уверен, что это та же проблема, но она звучит так же, как и у меня в течение нескольких месяцев. Посмотрите здесь мою проблему и решение:

Мне пришлось исправить ошибку в Ajax-Toolkit от 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
...