我正在尝试以编程方式添加一个<meta>.它工作正常时,有一个Head元素与runat = "server"在.aspx页.
背后的代码是:
HtmlMeta meta = new HtmlMeta();
meta.Name = "robots";
meta.Content = "noindex,follow";
this.Page.Header.Controls.Add(meta);
Run Code Online (Sandbox Code Playgroud)
但是我在head标签中有一些包含代码块的脚本<% ... %>,所以我无法保留该runat = "server"值.
问题是我必须以编程方式添加元标记,因为它依赖于数据库中的值.
有没有办法解决这个问题,以便我的头部元素内的脚本像往常一样工作,我可以编程方式添加元标记?
awe*_*awe 39
在该<header>部分:
<asp:PlaceHolder id="MetaPlaceHolder" runat="server" />
Run Code Online (Sandbox Code Playgroud)
请注意,Visual Studio可能会在PlaceHolder标记上显示警告,因为它不会被标识为标题内的已知元素,但您可以忽略它.有用.
在C#代码中:
HtmlMeta meta = new HtmlMeta();
meta.Name = "robots";
meta.Content = "noindex,follow";
MetaPlaceHolder.Controls.Add(meta);
Run Code Online (Sandbox Code Playgroud)
或者(因为您已经<% %>在标题部分中使用了代码块),您可以直接标记元数据并仅从服务器端检索值:
<meta name="robots" content="<%=GetMetaRobotsValueFromDatabase()%>" />
Run Code Online (Sandbox Code Playgroud)
非常感谢Awe的解决方案!我已在(error404.ascx)ASP.NET用户控件中实现此代码,如下所示:
<%@ Control Language="C#"%>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Response.TrySkipIisCustomErrors = true; //Suppress IIS7 custom errors
Response.StatusCode = 404;
SetRobotsHeaderMetadata();
}
private void SetRobotsHeaderMetadata()
{
HtmlMeta meta = new HtmlMeta();
meta.Name = "robots";
meta.Content = "noindex,follow";
this.Page.Master.FindControl("cphPageMetaData").Controls.Add(meta);
}
</script>
Run Code Online (Sandbox Code Playgroud)
使用以下主页:
<%@ Master Language="C#" AutoEventWireup="true" Inherits="MyMaster" %>
<script runat="server">
...
</script>
<!DOCTYPE html>
<html lang="en-GB">
<head>
<title>Site title here</title>
<asp:contentplaceholder runat="server" id="cphPageMetaData">
</asp:contentplaceholder>
</head>
<body>
...
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
或者你可以把你的元标记放在标题中,带有一个ID和一个runat ="server"...然后在后面的代码中说
myMetaTag.Content = "noindex,follow";
Run Code Online (Sandbox Code Playgroud)
要么
myMetaTag.Visible = false;
Run Code Online (Sandbox Code Playgroud)
或者你想要的任何东西.
尝试将您在<%....%>中执行的任何操作移动到代码隐藏中.如果您使用脚本将内容添加到页面中,则可以将其替换为asp:Literal控件,然后将先前在脚本块中计算的值设置为代码隐藏,并将Literal.Text设置为该值.
我认为这是最好的方法:
this.Page.Header.Controls.Add(new LiteralControl(@"<meta ... />"));
Run Code Online (Sandbox Code Playgroud)
请享用!
| 归档时间: |
|
| 查看次数: |
61326 次 |
| 最近记录: |