Установка активной вкладки в ASP.NET Ajax TabContainer заставляет весь контейнер исчезать

У меня есть страница ASP.NET, которая использует Инструментарий Управления Ajax ASP.NET TabContainer. В Page_Load событие, я скрываю некоторые вкладки на основе данных, данных странице. Я затем хочу сделать одну из вкладок активной на основе значения (дополнительно) параметра строки запроса.

Таким образом, я имею:

protected void Page_Load ( object sender, EventArgs e )
{
    if ( !this.IsPostBack )
    {
        // Tabs with no data are hidden in here
        LoadDataIntoTabs();

        PreselectCorrectTab();
    }
}

private void PreselectCorrectTab ()
{
    if ( ctlTabContainer.Visible )
    {
        if ( !string.IsNullOrEmpty( Request.QueryString[ "tabIndex" ] ) )
        {
            int tabIndex = 0;

            if ( int.TryParse( Request.QueryString[ "tabIndex" ], out tabIndex ) )
            {
                if ( ( ctlTabContainer.Tabs.Count > tabIndex ) && ctlTabContainer.Tabs[ tabIndex ].Visible )
                {
                    ctlTabContainer.ActiveTabIndex = tabIndex;
                }
            }
        }
    }
}

Если я поразил страницу tabIndex набор параметра строки запроса, весь контейнер вкладки исчезает.

Странная вещь - это, если я изменяюсь LoadDataIntoTabs() для не сокрытия вкладок, которые не содержат данных все работает, как Вы ожидали бы (т.е. корректная вкладка выбрана, когда страница представляет).

Какие-либо идеи?


Править

Согласно просьбе вот больше деталей:

private void LoadDataIntoTabs ()
{
    LoadPendingWidgetsTab();
    LoadDataIntoTab2();
    LoadDataIntoTab3();
    // etc...
}

private void LoadPendingWidgetsTab ()
{
    IList pendingWidgets = GetAllPendingWidgets();

    if ( ( pendingWidgets != null ) && ( pendingWidgets.Count > 0 ) )
    {
        tbpPendingWidgets.Visible = true;
        tbpPendingWidgets.HeaderText = String.Format( "Pending Widgets ({0})", pendingWidgets.Count );

        grdPendingWidgets.DataSource = pendingWidgets;
        grdPendingWidgets.DataBind();
    }
    else
    {
        tbpPendingWidgets.Visible = false;
    }
}

5
задан Matt Peterson 7 May 2009 в 16:54
поделиться

1 ответ

Попробуйте установить нужную вкладку через ActiveTab, например:

ctlTabContainer.ActiveTab = tbpPendingWidgets;

Если вы установите первую вкладку на Visible = false , тогда вам нужно установить следующую видимую вкладку через ActiveTab.

Я использую AjaxControlToolkit Release 30930 (сентябрь 2009 г.).

7
ответ дан 14 December 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: