Установка активной вкладки в ASP.NET Ajax TabContainer приводит к исчезновению всего контейнера - PullRequest
5 голосов
/ 01 мая 2009

У меня есть страница ASP.NET, которая использует ASP.NET Ajax Control Toolkit 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() на , а не , чтобы скрыть вкладки, которые не содержат данных, все будет работать так, как вы ожидаете (т. Е. При отображении страницы выбрана правильная вкладка). *

Есть идеи?


EDIT

По запросу, здесь более подробная информация:

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

private void LoadPendingWidgetsTab ()
{
    IList<Widget> 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;
    }
}

Ответы [ 3 ]

7 голосов
/ 10 марта 2010

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

ctlTabContainer.ActiveTab = tbpPendingWidgets;

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

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

2 голосов
/ 12 апреля 2011

Это сработало для меня:
Ручной сброс индекса, видимости и активной вкладки.

 tabcontainer.ActiveTab = tabname
 tabcontainer.Visible = True
 tabcontainer.ActiveTabIndex = 2

В другой ситуации, когда я не пытался установить активную вкладку, мне пришлось сбросить tabcontainer.ActiveTabIndex = 0.

Так что я соединил их, и это сработало.

0 голосов
/ 12 сентября 2013

это просто и отлично работает, попробуйте это

назначить индекс вкладки для каждой вкладки, которая используется в вашем контейнере вкладок, например ....

затем <cc1:TabContainer ID="TabContainer1" runat="server">

<cc1:TabPanel ID="tab1" runat="server" TabIndex="0"> // ваша панель </cc1:TabPanel> <cc1:TabPanel ID="tab2" runat="server" TabIndex="1"> // ваша панель </cc1:TabPanel>

</cc1:TabContainer>

написать этот код на странице cs

TabContainer1.ActiveTabIndex = 1;

...