2009-05-01 53 views
4

我有一個使用ASP.NET Ajax Control Toolkit TabContainer的ASP.NET頁面。在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()隱藏的標籤,一切都按你所期望的(即頁面呈現時選擇了正確的選項卡)。

任何想法?


編輯

按照要求,這裏有更多的細節:

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 2009-05-01 17:34:26

回答

6

嘗試通過ActiveTab設置所需的選項卡,如:

ctlTabContainer.ActiveTab = tbpPendingWidgets;

如果您設置第一個標籤Visible=false然後你必須通過ActiveTab設置下一個可見的標籤頁。

我使用AjaxControlToolkit版本30930(2009年9月)。

+0

這解決了我的問題。它看起來像是你的'ActiveTab'被隱藏起來,它會隱藏整個標籤容器。 – Mark 2010-06-14 23:08:09

1

這工作對我來說:
手動重置索引,可見性和活動選項卡。

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

在另一種情況下,我是不是要設置活動選項卡上,我不得不重新tabcontainer.ActiveTabIndex = 0

所以我把這兩個放在一起,它的工作。

0

這是簡單和完美工作,試試這個

分配Tab鍵索引爲每個在喜歡你的標籤的容器使用的標籤....

然後<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;

相關問題