asp.net中的回发:隐藏或显示基于会话变量的控件?

时间:2013-11-26 19:42:48

标签: asp.net postback

在我的页面标记中,我有以下div:

   <div id="utteranceFilterSection" runat="server" enableviewstate="true">
        <asp:Label ID="lblShowFilterPrompt" runat="server" Text="Show: "></asp:Label>
        <asp:DropDownList ID="ddlDetailsFilter" 
            AutoPostBack="true"
            runat="server" 
            OnSelectedIndexChanged="ddlDetailsFilter_SelectedIndexChanged">
            <asp:ListItem Value="All">All</asp:ListItem>
            <asp:ListItem Value="Pass">Passed</asp:ListItem>
            <asp:ListItem Value="Fail">Failed</asp:ListItem>
            <asp:ListItem Value="Blocked">Blocked</asp:ListItem>
        </asp:DropDownList>
    </div>

我想根据会话状态的内容显示或隐藏此div。在Page_Load中我有:

    if (Page.IsPostBack)
    {
       //if (this.Session["ShowFilterControl"] != null)
        //{
        //    this.utteranceFilterSection.Visible = true;
        //    this.Session.Remove("ShowFilterControl");
        //}
        this.utteranceFilterSection.Visible = true;
    }
    else
    {
        this.utteranceFilterSection.Visible = false;
    }

如果我使用未注释的回发代码,设置可见工作正常,但是,如果我尝试使用注释掉的代码执行此操作,我会在调试器中看到代码,但div不会显示。我做错了什么?

1 个答案:

答案 0 :(得分:0)

为什么不尝试设置bool并在if语句中与回发条件一起评估?像这样:

bool showFilter = (bool)this.Session["ShowFilterControl"];
if (Page.IsPostBack &&  showFilter)
    {
       this.Session["ShowFilterControl"] = false;
       this.utteranceFilterSection.Visible = true;
    }
    else
    {
        this.utteranceFilterSection.Visible = false;
    }