无法修改“控件”集合,因为该控件包含代码块-仅当它位于头部块中时才会出错



同意我的问题是这个问题的副本,公认的答案也适用于我。让我解释一下为什么。

当我在头部有<%=时,给出错误

当我在体内有<%=时,起作用

当我有<%#在头部它工作

我很想知道这三种情况的原因。

另外我创建了测试项目来模拟这个问题,但在这种情况下,所有三种情况都有效。

我的页面太大了,我无法决定粘贴什么代码

<%= %>实际上正在执行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一起使用它不是很常见,GridViewRepeater的用例是最典型的。

相关内容

最新更新