2

タブを非表示にする方法を知っています:

MyTabContainerID.Tabs[1].Visible = false;

それはうまくいきます。私が問題を抱えているのは、radioButtonListselectedIndexChangedイベントのポストバックによってトリガーされるタブの表示を変更することです。

ページがselectedIndexChangedイベントハンドラーに到達するまでに、タブはすでにViewStateからVisible=Trueをロードしています。selectedIndexChangedイベントで一日中falseに変更できますが、既にロードされているタブは非表示になりません。

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

考え?提案?

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 に答える