【问题标题】:Why <%= %> works in one situation but not in another为什么 <%= %> 在一种情况下有效,但在另一种情况下无效
【发布时间】:2010-08-08 12:29:00
【问题描述】:

这源于我昨晚给出的错误答案。关于为什么一种方法有效而不是另一种方法的好奇心困扰着我,我希望比我更聪明的人能给我正确的解释(或指向我的文档)为什么以下行为是这样的。

鉴于以下代码隐藏:

protected string GetMyText(string input)
{
  return "Hello " + HttpUtility.HtmlEncode(input);
}

为什么会这样

 <asp:Label ID="Label1" runat="server"><%= GetMyText("LabelText") %></asp:Label>

但这不是

<asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' />

编辑 - 添加

冒着让我的原始愚蠢答案被否决更多次的风险,这里是原始问题的链接,因为我现在得到的一些答案已经包含在该问题中。

Why can't I set the asp:Label Text property by calling a method in the aspx file?

【问题讨论】:

  • 单引号和双引号有什么区别吗?我知道有些语言使单引号内的所有内容都成为纯输出,而双引号内的文本首先被评估...
  • @peirix - 单引号和双引号对 ASP.NET 语法没有任何影响。该语法遵循 XML 语法规则,该规则声明您可以互换使用双引号和单引号,只要您始终以开始时的相同内容结尾。

标签: asp.net


【解决方案1】:

使用&lt;%= %&gt; 等于将Response.Write("") 放入您的页面。这样做时:

<asp:Label ID="Label1" runat="server"><%= GetMyText("LabelText") %></asp:Label>

ASP.NET 处理器评估控件,然后在呈现时输出控件的内容并调用Response.Write,它看到&lt;%=

在这个例子中:

<asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' />

您不能在 Text 属性上使用 Response.Write(""),因为它不返回字符串。它将其输出写入响应缓冲区并返回 void。

如果您想在 ASP.NET 标记中使用服务器标记语法,您需要使用&lt;%# %&gt;。标记数据的这种组合绑定了标记中的值。要完成这项工作,您需要在页面的 Load() 方法中调用 DataBind() 以使其工作。

【讨论】:

  • +1 是的,在文本属性中使用 response.Write 没有任何意义。
  • &lt;%# %&gt; 语句上展开...将在数据绑定时填写。这意味着除非在控件或其容器上调用DataBind(),否则不会发生任何事情。如果没有其他原因会导致控件上的数据绑定,则可以在 OnLoad 事件中调用 Page.DataBind()(如 Dan 所说),但如果控件已绑定数据,则没有必要。
  • 这是我第一次看到 结构,以及对它的解释。有谁知道详细解释所有 构造、它们的作用以及何时使用它们的好资源?
  • 这正是我正在寻找的答案。解释清楚,完整。谢谢。
  • 这里是各种服务器标签的解释:stackoverflow.com/questions/649428/asp-net-special-tags
【解决方案2】:

因为它们都是服务器端指令——第二段代码相当于:

<asp:Label ID="Label1" runat="server" Text='Response.Write(GetMyText("LabelText"))' />

【讨论】:

    【解决方案3】:

    基本意思是

    Response.Write(GetMyText("LabelText"));

    这里没问题。

    但是当你使用这个时:

    <asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' />
    

    基本意思是:

    Label1.Text = Response.Write(GetMyText("LabelText"));

    这是一个错误的说法。

    【讨论】:

      【解决方案4】:

      格式错误:

      <asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' />
      

      使用资源的正确格式:

      <asp:Label ID="Label1" runat="server" Text='<%$ Resources:Resource, MyText %' />
      

      【讨论】:

        【解决方案5】:

        要让它在第二种情况下工作,您需要如下所示:

        <asp:Label ID="Label1" runat="server" Text="<%# GetMyText("LabelText") %>" />
        

        然后 Label1 需要进行数据绑定。

        【讨论】:

          【解决方案6】:

          如果您的 LabelText 在全局资源文件中,请在服务器控件上执行此操作:

          <asp:Label ID="Label1" runat="server" Text="<%$ Resources: resourceName, LabelText %>" />
          

          【讨论】:

            猜你喜欢
            • 2017-08-09
            • 1970-01-01
            • 2018-10-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-22
            相关资源
            最近更新 更多