为什么<%=%>在一种情况下工作但在另一种情况下工作

时间:2009-10-07 13:16:32

标签: asp.net

这是因为我昨晚给出了一个糟糕的答案。关于为什么一种方法起作用而不是另一种方法的好奇心在困扰着我,我希望比我更聪明的人可以给我正确的解释(或指向我的文档),说明为什么以下行为是这样的。

鉴于以下代码隐藏:

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?

6 个答案:

答案 0 :(得分:42)

使用<%= %>等同于将Response.Write("")放入您的网页。这样做时:

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

ASP.NET处理器评估控件,然后在渲染时输出控件的内容&amp;在Response.Write看到<%=。{/ p>

在这个例子中:

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

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

如果要在ASP.NET标记中使用服务器标记语法,则需要使用<%# %>。标记数据的这种组合绑定标记中的值。为了实现这一目标,您需要在页面的DataBind()方法中调用Load()才能使其正常工作。

答案 1 :(得分:4)

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

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

答案 2 :(得分:4)

&lt;%= GetMyText(“LabelText”)%&gt;基本上意味着

回复于(GetMyText( “LabelText的”));

这里没关系。      &lt;%= GetMyText(“LabelText”)%&gt;

但是当你使用它时:

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

它基本上意味着:

Label1.Text = Response.Write(GetMyText(“LabelText”));

这是一个错误的陈述。

答案 3 :(得分:2)

格式错误:

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

使用资源的正确格式:

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

要使它在第二种情况下工作,你需要如下:

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

然后Label1将需要数据绑定。