这是因为昨天晚上给我一个坏的答案。对于为什么一种方法工作而不是另一种方法的好奇心是扰乱我,我希望比我更聪明的人可以给我正确的解释(或指向我的文档)为什么以下行为是这样的。
给出以下代码隐藏:
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?
解决方法
使用<%=%>等于在您的页面中放置Response.Write(“”)。这样做时
<asp:Label ID="Label1" runat="server"><%= GetMyText("LabelText") %></asp:Label>
ASP.NET处理器评估控件,然后在渲染时输出控件的内容&调用Response.Write它看到的位置<%=。 在这个例子中:
<asp:Label ID="Label1" runat="server" Text='<%= GetMyText("LabelText") %>' />
您不能在Text属性上使用Response.Write(“”),因为它不返回字符串。它将其输出写入响应缓冲区并返回void。
如果要在ASP.NET标记中使用服务器标签语法,则需要使用<%#%> ;.标记数据的这种组合绑定了标签中的值。为了使这个工作,你需要在页面的Load()方法中调用DataBind()来使它工作。