Установка активной вкладки в ASP.NET Ajax TabContainer приводит к исчезновению всего контейнера
-
03-07-2019 - |
Вопрос
У меня есть страница ASP.NET, которая использует ASP.NET Набор инструментов управления Ajax 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()
Для не скрывайте вкладки, которые не содержат данных, все работает так, как вы ожидали (т.е.при отображении страницы выбирается правильная вкладка).
Есть какие-нибудь идеи?
Редактировать
В соответствии с запросом, вот более подробная информация:
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).
Другие советы
У меня это сработало:
Ручной сброс индекса, видимости и активной вкладки.
tabcontainer.ActiveTab = tabname
tabcontainer.Visible = True
tabcontainer.ActiveTabIndex = 2
В другой ситуации, когда я не пытался установить активную вкладку, мне пришлось выполнить сброс настроек tabcontainer.ActiveTabIndex = 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;