【问题标题】:Change button class based on Session根据 Session 更改按钮类
【发布时间】:2016-06-23 12:37:15
【问题描述】:

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

到目前为止的代码:

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

错误:

上面的代码尝试将会话作为文本而不是会话运行。我已经尝试过使用 " 和 ' 。

历史:

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

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

【问题讨论】:

标签: css asp.net .net session


【解决方案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();
    }

'firstClass' 将作为 cssClass 分配给您的按钮。

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

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

现在将分配“NewClass”。

【讨论】:

    【解决方案2】:

    我会采取一些步骤来避免以这种方式依赖于您的会话,直接绑定到控件的属性。至少我会在 Page 类中调用像 MyDetailsButtonCssClass 这样的属性并将逻辑放在那里。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-07
      • 2015-06-10
      • 2023-04-03
      • 1970-01-01
      • 2021-08-08
      • 2019-07-31
      • 1970-01-01
      • 2014-08-30
      相关资源
      最近更新 更多