【问题标题】:Why doesn't binding expression work with C# expressions?为什么绑定表达式不能与 C# 表达式一起使用?
【发布时间】:2013-11-14 22:47:00
【问题描述】:

以下代码可以编译,但不起作用。据我所知,数据绑定表达式允许其中包含任何有效的 C# 代码。那么我在这里做错了什么?

<asp:Panel CssClass='<%# ("my-class") %>' runat="server" ID="myPannel">
   Blah
</asp:Panel>

<% this.myPannel.DataBind(); %>

我没有收到任何错误。它只是不呈现任何类属性。我试过不带括号,但运气也一样。

请注意,我需要在 CssClass 属性中评估一个表达式,并且我希望将该表达式的结果分配给 class 属性。这就是为什么我通过将字符串括在括号中来强调这一点的原因。

【问题讨论】:

  • 您遇到了什么错误。我会删除 css 类作业中的 () 。此外,它不需要服务器标签,因为它已经是一个硬编码常量
  • 不应该是&lt;%= "my-class" %&gt;吗?
  • 我没有收到任何错误。它只是不呈现任何类属性。我试过不带括号,但运气也一样。
  • 你试过=而不是#吗?
  • @acfrancis,= 呈现如下:&lt;div class="&amp;lt;%= &amp;quot; (my-class) &amp;quot;%&gt;"&gt;Blah&lt;/div&gt;

标签: c# asp.net webforms


【解决方案1】:

试试这个:

<html>
<head runat="server">
    <title></title>
    <script runat="server">
        protected void 
            Page_Load(object sender, EventArgs e)
        {
            this.myPannel.DataBind();
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:Panel CssClass='<%# ("my-class") %>' 
            runat="server" 
            ID="myPannel">
            Blah
        </asp:Panel>
    </form>
</body>
</html>

或者只是切换你的内联代码sn-ps的顺序:

<body>
    <% this.myPannel.DataBind(); %>
    <form id="form1" runat="server">
        <asp:Panel CssClass='<%# ("my-class") %>'
            runat="server"
            ID="myPannel">
            Blah
        </asp:Panel>
    </form>
</body>

或者干脆使用:

<% this.myPannel.CssClass = "my-class";%>
<form id="form1" runat="server">
    <asp:Panel
        runat="server"
        ID="myPannel">
        Blah
    </asp:Panel>
</form>

在所有这三种情况下,您必须确保在页面生命周期中处理控件的实际内联代码之前更新控件属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 2022-10-08
    • 1970-01-01
    • 2015-11-14
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多