为什么head-tag中的runat-attribute会改变ASP.NET中元标记的处理方式?

时间:2009-05-24 18:20:51

标签: asp.net webforms

示例1:

<head>
  <meta http-equiv="description" content="<%= Foo %>"/>
</head>

呈现

<meta http-equiv="description" content="Bar"/>

示例2:

<head runat="server">
  <meta http-equiv="description" content="<%= Foo %>"/>
</head>

渲染:

<meta http-equiv="description" content="&lt;%= Foo %>"/>

请注意差异,<已变为&lt;,但>仍然相同。

关于此主题有some questions,答案是解决方法,但似乎没有人知道为什么会这样。

2 个答案:

答案 0 :(得分:4)

您不能在服务器控件中包含脚本标记(&lt;%=%&gt;),这就是为什么它变成纯文本而不是执行。

您可以从后面的代码中添加元标记,如下所示:

HtmlMeta meta = new HtmlMeta();
meta.HttpEquiv = "description";
meta.Content = Foo;
Page.Header.Controls.Add(meta);

答案 1 :(得分:1)

当您添加runat = server时,Head标记将成为服务器控件。我想根据你的结果,服务器控件的内容不会使用&lt;%...%&gt;来解析内联替换。语法。

您可以通过向其添加runat = server并以编程方式访问其属性,使Meta标签成为服务器控件。