2

TextBox如果Session变量包含特定值,我正在尝试使用三元运算符将 css 类添加到 a :

<asp:TextBox runat="server" ID="txtMyTextBox" Width="70px"
  class='role-based jsSpinner <%= Session["MyVariable"] == "MyValue" ? "ui-widget-content ui-corner-all" : ""  %>' />

我可以确认它MyVariable具有MyValue价值,但是,当我运行应用程序时,该类不会被应用。我发现了其他几个类似的问题,但它们都将三元运算符用于绑定表达式(使用<%# %>),而不是用于评估 Session 变量。我觉得我错过了一些明显的东西。任何帮助表示赞赏。

4

2 回答 2

2

内联表达式不会在具有 runat="server" 的控件的属性中解析。但是,您可以使用数据绑定表达式。

检查此答案以获取有关<%= %><%# %>语法之间主要区别的信息。

<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() %>' />

您还尝试比较对象引用和字符串引用。需要将对象转换为字符串以使等于运算符起作用。

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;
于 2014-08-12T15:35:33.630 回答
0

您的代码很好,不需要演员表。我打赌字符串不在会话中。使用您的调试器。这在 VS 2008 C# 中对我有用

<%Session["foo"] = "bar"; %>
<div class='<% = Session["foo"] == "bar" ? "yes":"no" %>'>
于 2014-08-12T15:59:08.540 回答