同意我的问题是这个问题的副本,公认的答案也适用于我。让我解释一下为什么。
当我在头部有<%=
时,给出错误。
当我在体内有<%=
时,起作用。
当我有<%#
在头部它工作。
我很想知道这三种情况的原因。
另外我创建了测试项目来模拟这个问题,但在这种情况下,所有三种情况都有效。
我的页面太大了,我无法决定粘贴什么代码
<%= %>
实际上正在执行Response.Write
,这实际上是向响应写入符号。到最后的标记,即。
现在注意你的head
标签有这个属性runat="server"
。这使它成为一个服务器控件。也就是说,这不是最终的标记,而是在控件呈现阶段输出一些标记以响应的控件。您不能调用响应。写在这个控件上,因为它还不是最终的标记。
出于同样的原因,它在页面主体中会起作用/不起作用。如果你把它放在普通标记的某个地方,那就没问题了:
<div><%= "Blah" %></div> <%-- works! --%>
但是一旦它出现在runat="server"
里面你就会得到一个错误
<div runat="server><%= "Blah" %></div> <%-- error! --%>
<asp:Panel runat="server"><%= "Blah" %></asp:Panel> <%-- error! --%>
现在<%# %>
是一个不同的野兽。这是一个数据绑定标记,当服务器端控件被数据绑定时,将对其进行评估。因此,它在普通标记中没有任何意义(并且无效),并且可以在控件绑定到某些数据时使用。与header一起使用它不是很常见,GridView
或Repeater
的用例是最典型的。