2009-05-01 5 views
4

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

Так у меня есть:

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; 
    } 
} 
+0

Можете ли вы разместить код для LoadDataIntoTabs(), похоже, проблема там есть – Jon

ответ

6

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

ctlTabContainer.ActiveTab = tbpPendingWidgets;

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

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

+0

Это исправило мою проблему. Похоже, если ваш «ActiveTab» становится невидимым, он скрывает весь контейнер табуляции. – Mark

1

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

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

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

Так что я поставил их вместе, и это сработало.

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;

 Смежные вопросы

  • Нет связанных вопросов^_^