这是因为我昨晚给出了一个糟糕的答案。关于为什么一种方法起作用而不是另一种方法的好奇心在困扰着我,我希望比我更聪明的人可以给我正确的解释(或指向我的文档),说明为什么以下行为是这样的。
鉴于以下代码隐藏:
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?
答案 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将需要数据绑定。