在C#中以编程方式添加元标记

我正在尝试以编程方式添加 。 当.aspx页面中有一个带有runat = "server"Head元素时,它工作正常。

背后的代码是:

 HtmlMeta meta = new HtmlMeta(); meta.Name = "robots"; meta.Content = "noindex,follow"; this.Page.Header.Controls.Add(meta); 

但是我在head标签中有一些脚本包含像这样的代码块,所以我不能保留runat = "server"值。

问题是我必须以编程方式添加元标记,因为它依赖于数据库中的值。

有没有办法解决这个问题,以便我的头部元素内的脚本像往常一样工作,我可以编程方式添加元标记?

好的,我测试了veggerby的答案 ,它完美地运作:

部分:

  

请注意,Visual Studio可能会在PlaceHolder标记上显示警告,因为它不会被标识为标题内的已知元素,但您可以忽略它。 有用。

在C#代码中:

 HtmlMeta meta = new HtmlMeta(); meta.Name = "robots"; meta.Content = "noindex,follow"; MetaPlaceHolder.Controls.Add(meta); 

或者(因为您已经在标题部分使用<% %>了代码块),您可以直接标记元数据并仅从服务器端检索值:

  

非常感谢Awe的解决方案 ! 我已在(error404.ascx)ASP.NET用户控件中实现此代码,如下所示:

 <%@ Control Language="C#"%>  

使用以下主页:

 <%@ Master Language="C#" AutoEventWireup="true" Inherits="MyMaster" %>     Site title here     ...   

或者你可以把你的元标记放在标题中,带有一个ID和一个runat =“server”…然后在后面的代码中说

 myMetaTag.Content = "noindex,follow"; 

要么

 myMetaTag.Visible = false; 

或者你想要的任何东西。

我认为这是最好的方法:

 this.Page.Header.Controls.Add(new LiteralControl(@"")); 

请享用!

尝试将您在<%....%>中执行的任何操作移动到代码隐藏。 如果您使用脚本向页面添加内容,则可以将其替换为asp:Literal控件,然后将先前在脚本块中计算的值设置为代码隐藏,并将Literal.Text设置为该值。

我还没有测试过,但也许你可以在标签内添加并将meta标签添加到此标签中。

最好的解决方案,我成功检查了没有任何错误或警告:

包含<% ... %>代码的JavaScript代码已从head删除并放置在body部分中。

您可以将元标记定义为静态字符串,如下所示:

 Private Shared MetaLanguage As String = String.Format("", CultureInfo.CurrentUICulture.TwoLetterISOLanguageName) 

然后把它们放在你的脑袋里:

  <%=MetaLanguage%>  

这允许您使用任何元标记值,并且易于阅读和自定义。 注意:使用Shared关键字(静态)有助于提高性能。

MetaDescription =“您的元描述在这里”; MetaKeywords =“Keyword1,Keyword2,Keyword3”;

好的……我实际上只使用C#…或HTML进入C#。 我从不在文件aspx中使用代码隐藏,设计器或web控件……所以我从类中编程所有内容 ……并动态地编程。

结果:

 HtmlMeta meta = new HtmlMeta(); meta.Name = "robots"; `meta.Content = "Here is what you want";` var page=HttpContext.Current.Handler as Page; page.Header.Controls.Add(meta);