2

我知道如何隐藏标签:

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>

澳交所

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

想法?建议?

4

2 回答 2

2

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

我有一个类似的问题,无法设置 Visibilty。它快把我逼疯了。解决方案是在容器(父)控件中明确设置可见性。这将覆盖子控件的设置。会不会是你的问题。

除此之外,照常做。断点rblMyRadioButtonList_SelectedIndexChanged和观察值。另外-您可以手动强制打开可见性Page_PreRender-仍然在下游。

编辑

可能影响它的另一件事是更新面板。如果单选按钮列表位于更新面板中并且选项卡位于其外部,则更新将不起作用,因为带有选项卡的页面部分不会被刷新。

于 2012-06-22T13:08:44.853 回答
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>

* Page_Load 上的 .ASCX

//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);
}
于 2012-07-06T12:38:29.277 回答