ASP.NET Ajax TabContainerでアクティブなタブを設定すると、コンテナー全体が消えます
-
03-07-2019 - |
質問
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ページにこのコードを書く
<=>