ASP.NET Ajax TabContainerでアクティブなタブを設定すると、コンテナー全体が消えます

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

質問

ASP.NET Ajaxを使用するASP.NETページがあります。 Control Toolkit TabContainer 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;
    }
}
役に立ちましたか?

解決

次のようにActiveTabで目的のタブを設定してみてください:

ctlTabContainer.ActiveTab = tbpPendingWidgets;

最初のタブをVisible=falseに設定した場合、ActiveTabを介して次の表示タブページを設定する必要があります。

AjaxControlToolkitリリース30930(2009年9月)を使用しています。

他のヒント

これは私のために働いた:
インデックス、可視性、アクティブなタブを手動でリセットします。

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

アクティブなタブを設定しようとしていない別の状況では、tabcontainer.ActiveTabIndex = 0をリセットする必要がありました。

だから私は2つを一緒に入れて、それは働いた。

これはシンプルで完璧に機能します。これを試してください

次のようにタブコンテナで使用されるすべてのタブにタブインデックスを割り当てます。...

then <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:TabContainer>

TabContainer1.ActiveTabIndex = 1;

csページにこのコードを書く

<=>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top