我正在尝试隐藏和显示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.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"];
}
}
}