如何在asp.net中设置动态元标记?

时间:2012-03-29 11:54:11

标签: asp.net meta-tags

我正在尝试将facebook标记添加到页面中。它们必须针对不同的用户有所不同,所以我尝试动态地添加它们。我有这样的代码:

<meta name="og:title" content="<%= GetSocialTitle() %>"/>

但是在源页面中它没有发现并且看起来像:

<meta name="og:title" content="&lt;%= GetSocialTitle() %>"/>

而不是

<meta name="og:title" content="some title">

我试图在代码中设置meta

HtmlMeta tag = new HtmlMeta();
tag.Name = "og:title";
tag.Content = GetSocialTitle();
Page.Header.Controls.Add(tag);

但它抛出异常“控件集合无法修改,因为控件包含代码块(即&lt;%...%&gt;)”。它真的包含,我无法取代它们。那么我该如何解决这个问题?

2 个答案:

答案 0 :(得分:12)

如果你想使用后面的代码删除og:title meta标签并将headat =“server”放在head标签中。

标记中的

<head runat="server">
  ...
</head>

和代码背后:

HtmlMeta tag = new HtmlMeta();
tag.Name = "og:title";
tag.Content = GetSocialTitle();
Page.Header.Controls.Add(tag);

如果您不想使用代码,请从head标签中删除runat服务器:

<head>
  <meta name="og:title" content="<%= GetSocialTitle() %>"/>
  ...
</head>

答案 1 :(得分:3)

另一个小技巧是围绕内容使用占位符控件。 所以在你的情况下,你可以......

        <asp:PlaceHolder runat="server">
             <meta name="og:title" content="<%= GetSocialTitle() %>"/>
        </asp:PlaceHolder>

它应该正确翻译。

HTH

戴夫