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

StackOverflow https://stackoverflow.com/questions/811657

Вопрос

У меня есть страница ASP.NET, которая использует ASP.NET Набор инструментов управления Ajax TabContainerPage_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<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;
    }
}
Это было полезно?

Решение

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

ctlTabContainer.ActiveTab = tbpPendingWidgets;

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

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

Другие советы

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

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

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

Поэтому я соединил их вместе, и это сработало.

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

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

тогда <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;

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top