切换选项卡时AJAX选项卡中的组件未显示



我正在尝试隐藏和显示Ajax选项卡面板,这些条件是我从SQL获得的某些条件。假设我得到了三个选项卡,第一个选项卡总是在那里,第二个选项卡仅在尚未交付时显示,而第三个选项卡仅在交付时显示第三个选项卡。这是我切换选项卡以获取选项卡索引的方法:

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();
        }
    }

但是,当交付状态交付时,它会隐藏第二个选项卡。但是第三个选项卡中的组件未显示。我想知道这是因为是否有其他关于活动变化方法的语句,导致此问题?

预先感谢。

编辑

<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>

问题是TabContainer.ActiveTabIndex将跳过隐藏的选项卡(S)。如果将TabPanelSPU.Visible设置为false,则单击TabPanelViewSPUItem(第三个选项卡)TabContainer.ActiveTabIndex的值将为1而不是2。这解释了为什么未显示第三个选项卡中的组件。

我建议检查 TabPanelSPU.VisibleTabPanelViewSPUItem.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"];
        }
    }
}

最新更新