5

我有一个使用ASP.NET Ajax Control Toolkit TabContainer的 ASP.NET 页面。在这种情况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<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;
    }
}
4

3 回答 3

7

尝试通过 ActiveTab 设置所需的选项卡,例如:

ctlTabContainer.ActiveTab = tbpPendingWidgets;

如果将第一个选项卡设置为,Visible=false则必须通过 ActiveTab 设置下一个可见选项卡页。

我正在使用 AjaxControlToolkit Release 30930(2009 年 9 月)。

于 2010-03-10T15:39:25.987 回答
2

这对我有用:
手动重置索引、可见性和活动选项卡。

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

在我没有尝试设置活动选项卡的另一种情况下,我不得不重置 tabcontainer.ActiveTabIndex = 0.

所以我把两者放在一起,它起作用了。

于 2011-04-12T15:38:33.797 回答
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;

于 2013-09-12T06:59:35.673 回答