【问题标题】:Setting active tab in ASP.NET Ajax TabContainer causes entire container to disappear在 ASP.NET Ajax TabContainer 中设置活动选项卡会导致整个容器消失
【发布时间】:2010-10-23 03:17:39
【问题描述】:

我有一个使用 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() 更改为 not 隐藏不包含数据的选项卡,一切都会按您的预期进行(即在页面呈现时选择了正确的选项卡)。

有什么想法吗?


编辑

根据要求,这里有更多详细信息:

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

【问题讨论】:

  • 你能把 LoadDataIntoTabs() 的代码贴出来吗,听起来问题出在那儿

标签: asp.net asp.net-ajax ajaxcontroltoolkit tabcontainer


【解决方案1】:

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

ctlTabContainer.ActiveTab = tbpPendingWidgets;

如果您将第一个标签设置为Visible=false,那么您必须通过 ActiveTab 设置下一个可见标签页。

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

【讨论】:

  • 这解决了我的问题。看起来如果您的“ActiveTab”不可见,它会使整个标签容器隐藏。
【解决方案2】:

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

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

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

所以我把两者放在一起,它就奏效了。

【讨论】:

    【解决方案3】:

    这很简单,效果很好,试试这个

    为标签容器中使用的每个标签分配标签索引,例如......

    然后&lt;cc1:TabContainer ID="TabContainer1" runat="server"&gt;

    &lt;cc1:TabPanel ID="tab1" runat="server" TabIndex="0"&gt; //你的面板 &lt;/cc1:TabPanel&gt; &lt;cc1:TabPanel ID="tab2" runat="server" TabIndex="1"&gt; //你的面板 &lt;/cc1:TabPanel&gt;

    &lt;/cc1:TabContainer&gt;

    在cs页面中编写这段代码

    TabContainer1.ActiveTabIndex = 1;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 2014-10-09
      相关资源
      最近更新 更多