根据Session更改按钮类

时间:2016-03-09 08:30:02

标签: css asp.net .net session

目标:将会话添加到ASP按钮,以便我可以根据一组规则更改CSS值。

到目前为止

代码:

<asp:Button ID="btnMyDetails" runat="server" Text="My Details" CssClass="<%=Session.Item('btnMyDetails').ToString()%>" CausesValidation="False" />

错误:

上面的代码尝试将会话作为文本而不是会话运行。我试过两个&#34;和&#39;周围。

历史:

我有一个工作版本,我使用列表,但想删除这个额外的编码:

<li class="<%=Session.Item("btnMyDetails").ToString()%>"
<asp:Button ID="btnMyDetails" runat="server" Text="All" CssClass="Button" /></li>

2 个答案:

答案 0 :(得分:1)

使用以下:

<asp:Button ID="btnMyDetails" runat="server" Text="My Details"  CssClass='<%#Session["btnMyDetails"].ToString()%>' CausesValidation="False"     OnClick="btnMyDetails_Click" />

当你为Session变量设置值时,不要忘记调用你创建的Button的DataBind方法。如果你不调用DataBind方法,将不会分配任何内容。

例如,在page_load方法中,您将会话变量设置为某个值,

    protected void Page_Load(object sender, EventArgs e)
    {
        Session["btnMyDetails"] = "firstClass";
        btnMyDetails.DataBind();
    }

&#39;的Firstclass&#39;将被指定为cssClass到您的按钮。

之后如果更改会话变量的值,则再次调用该按钮的DataBind方法。给出了Button Click事件的示例

    protected void btnMyDetails_Click(object sender, EventArgs e)
    {
        Session["btnMyDetails"] = "NewClass";
        btnMyDetails.DataBind();
    }

现在&#39; NewClass&#39;将被分配。

答案 1 :(得分:0)

我会采取一些措施来避免依赖于你的会话,直接绑定到控件的属性。至少我会在Page类中调用类似MyDetailsButtonCssClass的属性并将逻辑放在那里。

是否存在会话中更改的特定条件,您可以使用它来确定类而不是直接将类名放在会话中?否则,您可能会发现自己有一个更改的逻辑条件,但会在会话中存储多个类名。