在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);