AJAXToolkit动态隐藏选项卡?

时间:2012-06-22 12:52:34

标签: c# asp.net

我知道如何隐藏标签:

MyTabContainerID.Tabs[1].Visible = false;

有效。我遇到的问题是更改由radioButtonList selectedIndexChanged事件的回发触发的选项卡的可见性。

当页面到达selectedIndexChanged事件处理程序时,选项卡已从ViewState加载Visible = True。我可以在selectedIndexChanged事件中整天将其更改为false,它不会隐藏它已经加载的标签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; }
}

思考?建议?

2 个答案:

答案 0 :(得分:2)

您应该能够在rblMyRadioButtonList_SelectedIndexChanged方法中设置标签控件的可见性。即使此时已从ViewState加载了选项卡控件的状态,它仍然可以被覆盖。

我有一个类似的问题,Visibilty无法设置。这让我很生气。解决方案是在容器(父)控件中明确设置了可见性。这将覆盖子控件的设置。这可能是你的问题。

除此之外,那就照常做。 rblMyRadioButtonList_SelectedIndexChanged上的断点并观察值。此外 - 您可以手动强制Page_PreRender上的可见性 - 这仍然是下游的。

修改

可能影响它的另一件事是更新面板。如果radiobutton列表位于更新面板中且选项卡位于其外部,则更新将不会作为页面的一部分工作,并且不会刷新选项卡。

答案 1 :(得分: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 on 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);
}