目标:将会话添加到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>
答案 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
的属性并将逻辑放在那里。
是否存在会话中更改的特定条件,您可以使用它来确定类而不是直接将类名放在会话中?否则,您可能会发现自己有一个更改的逻辑条件,但会在会话中存储多个类名。