2012-06-22 4 views
2

Я знаю, как скрыть вкладку:AJAXToolkit Динамически Скрыть вкладку?

MyTabContainerID.Tabs[1].Visible = false; 

Это работает. У меня возникают проблемы с изменением видимости вкладки, вызванной обратной передачей события radioButtonList selectedIndexChanged.

К тому времени, как страница достигает моего обработчика событий selectedIndexChanged, вкладка уже загружена Visible = True из ViewState. Я могу изменить его на false весь день в событии selectedIndexChanged, он не скроет вкладку b/c, которую она уже загрузила.

ASPX

<asp:RadioButtonList ID="rblMyRadioButtonList" runat="server" AutoPostBack="true" OnSelectedIndexChanged="rblMyRadioButtonList_SelectedIndexChanged">               
<asp:ListItem Text="Yes" Value="True" Selected="True"></asp:ListItem> 
<asp:ListItem Text="No" Value="False"></asp:ListItem> 

ASCX

protected void Page_Init(object sender, EventArgs e) 
{ 
    try 
    { 
     MyTabContainerID.Tabs[1].Visible = Tab1Visibility; 
    } 
    catch (Exception ex) 
    { 
     common.alert("Error in PageName.Page_Init.<br>ERROR=" + ex.Message); 
    } 
} 
protected void rblMyRadioButtonList_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    try 
    {  
     Tab1Visibility = Convert.ToBoolean(((RadioButtonList)sender).SelectedValue); 
     MyTabContainerID.Tabs[1].Visible = Tab1Visibility; //BY THE TIME THIS HAPPENS IT'S ALREADY ON THE PAGE WITH VISIBLE=TRUE     
    } 
    catch (Exception ex) 
    { 
     common.alert("Error in PageName.rblMyRadioButtonList_SelectedIndexChanged.<br>ERROR=" + ex.Message); 
    } 
} 

protected bool Tab1Visibility 
{ 
    get { return (bool)Session["ses_bTab1Visibility"]; } 
    set { Session["ses_bTab1Visibility"] = value; } 
} 

Мысли? Предложения?

ответ

0

Вот что я в конечном итоге делает:

* .aspx

<script type="text/javascript"> 
    function disableTab1() { 
      $find('<%=MyTabContainer.ClientID%>').get_tabs()[1].set_enabled(false); 
     } 
    function enableTab1() { 
     $find('<%=MyTabContainer.ClientID%>').get_tabs()[1].set_enabled(true); 
    } 
</script> 

<!--THESE RADIOBUTTONS LEVERAGE THE TAB CONTAINER'S CLIENTSIDE set_enabled METHOD 
<asp:RadioButtonList ID="rblMyRadioButtonList" runat="server" RepeatDirection="Horizontal" RepeatLayout="Flow"> 
    <asp:ListItem Text="Yes" Value="True" Selected="True" onClick="enableTab1();"></asp:ListItem> 
    <asp:ListItem Text="No" Value="False" onClick="disableTab1();"></asp:ListItem> 
</asp:RadioButtonList> 

* .ascx на Page_Load

//I RUN A SQL QUERY TO DETERMINE WHETHER OR NOT TO DISABLE TAB1 HERE 
//IF IT SHOULD BE DISABLED I REGISTER THIS STARTUP SCRIPT 
ClientScriptManager cs = Page.ClientScript; 
Type cstype = this.GetType(); 
String csScriptName = "Tab1_Visibility"; 
if (!cs.IsStartupScriptRegistered(cstype, csScriptName)) 
{ 
    cs.RegisterStartupScript(this.Page.GetType(), csScriptName, "setTimeout(function() { disableTab1()}, 0);", true); 
} 
2

Вы должны быть в состоянии установить видимость элемента управления вкладки в методе rblMyRadioButtonList_SelectedIndexChanged. Даже несмотря на то, что состояние элемента управления вкладками будет загружено из ViewState, в этот момент он все равно может быть переопределен.

У меня была проблема с similair, где Visibilty просто не мог быть установлен. Это сводило меня с ума. Решение заключалось в том, что видимость была явно задана в контрольном контейнере (родительский). Это изменит настройку для дочернего элемента управления. Это может быть ваша проблема.

Другие, чем это делают обычные. Точка останова на rblMyRadioButtonList_SelectedIndexChanged и смотреть значения. Кроме того, вы можете вручную принудительно установить видимость на Page_PreRender, который находится дальше по течению.

EDIT

Другая вещь, которая может повлиять на это обновление панели. Если список радиообъектов находится на панели обновлений, а вкладка находится за его пределами, обновление не будет работать, так как часть страницы с вкладкой не будет обновлена.

+0

не только видимость вкладки получения установлен в значение False в моем событии selectedIndexChanged, по вашему предложению, я снова установил его в Page_PreRender. Закладка остается видимой, когда страница загружается. Если я установил видимость вкладки False, когда IsPostBack работает, это работает. Но при настройке видимости на PostBack я не получаю радости. – s15199d

+0

Возможно, стоит отметить иерархию страниц: Страница> TabContainer> TabPanel> FormView> RadioButtonList – s15199d

+0

Ahhh ... ваше редактирование имеет смысл ... это вполне может быть проблемой ... Мне нужно будет изучить это еще немного. – s15199d

Смежные вопросы