如果TextBox
变量包含特定值,我正在尝试使用三元运算符将css类添加到Session
:
<asp:TextBox runat="server" ID="txtMyTextBox" Width="70px"
class='role-based jsSpinner <%= Session["MyVariable"] == "MyValue" ? "ui-widget-content ui-corner-all" : "" %>' />
我可以确认MyVariable
具有MyValue
值,但是,当我运行应用程序时,该类不会被应用。我发现了其他几个类似的问题,但它们都使用三元运算符来表示绑定表达式(使用<%# %>
)而不是用于评估Session变量。我觉得我错过了一些明显的东西。任何帮助表示赞赏。
答案 0 :(得分:2)
在runat =“server”的控件的属性中不解析内联表达式。但是,您可以使用数据绑定表达式。
检查this answer,了解&lt;%=%&gt; 和&lt;%#%&gt; 语法之间的主要区别。
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
string Foo()
{
return (string)Session["MyVariable"] == "MyValue" ? "ui-widget-content ui-corner-all" : "";
}
</script>
<asp:TextBox runat="server" CssClass='<%# Foo() %>' />
您还尝试比较对象引用和字符串引用。需要将对象强制转换为字符串以使equals运算符起作用。
bool test1 = (string)Session["MyVariable"] == "MyValue";
bool test2 = String.Compare((string)Session["MyVariable"], "MyValue") == 0;
object myString = 1.ToString();
// false
// Warning: Possible unintended reference comparison; to get a value comparison, cast the left hand side to type 'string'
bool bad = myString == "1";
// true
bool good1 = (string)myString == "1";
// true
bool good2 = String.Compare((string)myString, "1") == 0;
答案 1 :(得分:0)
您的代码很好,不需要演员表。我打赌字符串不在会话中。使用调试器。这在VS 2008 C#
中对我有用<%Session["foo"] = "bar"; %>
<div class='<% = Session["foo"] == "bar" ? "yes":"no" %>'>