2014-02-02 3 views
0

Я пытаюсь скрыть и показать панель вкладок AJAX с определенным условием, которое я получаю от SQL. Предположим, у меня есть три вкладки, первая вкладка всегда есть, вторая вкладка отображается только тогда, когда она еще не доставлена, а третья вкладка отображается только тогда, когда она доставлена. Вот метод, который я включаю вкладку, чтобы получить индекс вкладки:Компоненты на вкладке AJAX не отображаются при переходе на вкладку

protected void Page_Load(object sender, EventArgs e) 
    { 
     //Get distributionID based on URL 
     distributionID = Request.QueryString["id"]; 

     //First tab to display beneficiary details 
     beneficiaryIndv = packBLL.getBeneficiaryDetail(distributionID); 

     if (IsPostBack) 
     { 
      //Get the index of selected tab 
      if (!(ViewState["TabIndex"] == null) && (!(sender == null))) 
      { 
       if (sender.GetType().ToString().Equals("AjaxControlToolkit.TabContainer")) 
       { 
        ((AjaxControlToolkit.TabContainer)sender).ActiveTabIndex = (int)ViewState["TabIndex"]; 
       } 
      } 
     } 

     //On page load to check the delivery status to determine which tab to hide 
     string isDelivered = packBLL.checkIsDelivered(distributionID); 
     if (isDelivered == "Y") 
     { 
      TabPanelSPU.Visible = false; 
     } 
     else 
     { 
      TabPanelViewSPUItem.Visible = false; 
     } 
    } 

protected void TabContainer_OnActiveTabChanged(object sender, EventArgs e) 
    { 
     ViewState["TabIndex"] = TabContainer.ActiveTabIndex; 

     if ((int)ViewState["TabIndex"] == 1) 
     { 
      //Get the list of standard packing unit by distribution 
      List<DistributionStandardPackingUnits> SPUList = new List<DistributionStandardPackingUnits>(); 
      SPUList = packBLL.getAllDistSPUByDistID(distributionID); 
      gvSPU1.DataSource = SPUList; 
      gvSPU1.DataBind(); 
     } 
     else if ((int)ViewState["TabIndex"] == 2) 
     { 
      //Get the list of standard packing unit by distribution 
      List<DistributionStandardPackingUnits> SPUList = new List<DistributionStandardPackingUnits>(); 
      SPUList = packBLL.getAllDistSPUByDistID(distributionID); 
      gvSPU.DataSource = SPUList; 
      gvSPU.DataBind(); 
     } 
    } 

Однако, когда статус доставки будет доставлен, он скрывает вторую вкладку. Но компоненты внутри третьей вкладки не отображаются. Интересно, это из-за выражения if else в tab на методе активных изменений, вызывающем эту проблему?

Заранее спасибо.

EDIT

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> 
         </asp:ToolkitScriptManager> 

         <asp:TabContainer ID="TabContainer" runat="server" ActiveTabIndex="0" 
          OnActiveTabChanged="TabContainer_OnActiveTabChanged" AutoPostBack="true"> 

          <!--FIRST TAB --> 
          <asp:TabPanel ID="TabPanelBeneficiary" runat="server" HeaderText="Beneficiary" CssClass="ajax__tab_tab"> 
           <ContentTemplate> 
            <h3 class="form-section">Person Info</h3> 

            <h3 class="form-section">Address</h3> 

           </ContentTemplate> 
          </asp:TabPanel> 

          <!--SECOND TAB --> 
          <asp:TabPanel ID="TabPanelSPU" runat="server" HeaderText="Standard Packing" CssClass="ajax__tab_tab"> 
           <ContentTemplate> 

           </ContentTemplate> 
             </div> 
            </div> 
                     </ContentTemplate> 
          </asp:TabPanel> 

          <!--THIRD TAB --> 
          <asp:TabPanel ID="TabPanelViewSPUItem" runat="server" HeaderText="Distributed Packing Items" CssClass="ajax__tab_tab"> 
           <ContentTemplate> 

           </ContentTemplate> 
          </asp:TabPanel> 
+0

Проверьте состояние: если оно доставлено, затем скройте вторую вкладку и покажите третью вкладку; если он не доставлен, затем отобразите вторую вкладку и скройте третью вкладку? – ekad

+0

Да, это должно работать так. Поскольку мой viewState получает tabIndex 2, который означает третью вкладку, когда я скрываю вторую вкладку, она ничего не показывает внутри вкладки –

+0

Является ли 'gvSPU1' внутри' TabPanelSPU' и 'gvSPU' внутри' TabPanelViewSPUItem'? – ekad

ответ

0

Проблема заключается в том TabContainer.ActiveTabIndex пропустит вкладку (ы) скрытый. Если вы установили TabPanelSPU.Visible на false, то при нажатии на TabPanelViewSPUItem (третья вкладка) значение TabContainer.ActiveTabIndex будет равно 1 вместо 2. Это объясняет, почему компоненты на третьей вкладке не отображаются.

я предлагаю проверить TabPanelSPU.Visible и TabPanelViewSPUItem.Visible вместо

protected void TabContainer_OnActiveTabChanged(object sender, EventArgs e) 
{ 
    if (TabPanelSPU.Visible) 
    { 
     //Get the list of standard packing unit by distribution 
     List<DistributionStandardPackingUnits> SPUList = new List<DistributionStandardPackingUnits>(); 
     SPUList = packBLL.getAllDistSPUByDistID(distributionID); 
     gvSPU1.DataSource = SPUList; 
     gvSPU1.DataBind(); 
    } 

    if (TabPanelViewSPUItem.Visible) 
    { 
     //Get the list of standard packing unit by distribution 
     List<DistributionStandardPackingUnits> SPUList = new List<DistributionStandardPackingUnits>(); 
     SPUList = packBLL.getAllDistSPUByDistID(distributionID); 
     gvSPU.DataSource = SPUList; 
     gvSPU.DataBind(); 
    } 
} 

Вам также необходимо удалить эту часть кода в Page_Load, так как он не нужен.

if (IsPostBack) 
{ 
    //Get the index of selected tab 
    if (!(ViewState["TabIndex"] == null) && (!(sender == null))) 
    { 
     if (sender.GetType().ToString().Equals("AjaxControlToolkit.TabContainer")) 
     { 
      ((AjaxControlToolkit.TabContainer)sender).ActiveTabIndex = (int)ViewState["TabIndex"]; 
     } 
    } 
} 
+0

К сожалению, это не сработает. На третьей вкладке ничего не отображается, если я устанавливаю видимость второй вкладки равной false. –

+0

Проверьте мой отредактированный ответ. – ekad

+0

Я удалил IsPostBack со страницыLoad и поместил в код выше, но он тоже не работает :( –

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