Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中以编程方式添加元标记#_C#_Asp.net - Fatal编程技术网

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

C# 在C中以编程方式添加元标记#,c#,asp.net,C#,Asp.net,我正在尝试以编程方式添加。当.aspx页面中有Head元素带有runat=“server”时,它工作正常 背后的代码是: HtmlMeta meta = new HtmlMeta(); meta.Name = "robots"; meta.Content = "noindex,follow"; this.Page.Header.Controls.Add(meta); 但是我在head标记中有一些脚本,它包含像这样的代码块,因此我无法保留runat=“server”值 问题是我必须以编程方式添加

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

背后的代码是:

HtmlMeta meta = new HtmlMeta();
meta.Name = "robots";
meta.Content = "noindex,follow";
this.Page.Header.Controls.Add(meta);
但是我在head标记中有一些脚本,它包含像
这样的代码块,因此我无法保留
runat=“server”

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


有没有办法解决这个问题,使我在head元素中的脚本能够正常工作,并且我可以通过编程方式添加元标记?

尝试将您在中所做的任何事情移动到后面的代码中。如果使用脚本将内容添加到页面中,可以将其替换为asp:Literal控件,然后将以前在脚本块中计算的值设置为代码隐藏,并将Literal.Text设置为该值。

我没有测试它,但是,也许您可以在
标记中添加
,并将元标记添加到此标记中。

或者您可以将元标记放在标题中,带有ID和runat=“server”。。。然后在代码后面说

myMetaTag.Content = "noindex,follow";

或者你想要的任何东西。

好的,我测试了,它工作得非常好:

部分:

<asp:PlaceHolder id="MetaPlaceHolder" runat="server" />
或者(因为在标题部分中已经有使用
的代码块),您可以直接标记元数据,并仅从服务器端检索值:

<meta name="robots" content="<%=GetMetaRobotsValueFromDatabase()%>" />

非常感谢您!我在(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>

受保护的无效页面加载(对象发送方、事件参数e)
{
Response.tryskipiiscustomerors=true;//抑制IIS7自定义错误
Response.StatusCode=404;
SetRobotsHeaderMetadata();
}
私有void SetRobotsHeaderMetadata()
{
HtmlMeta=新的HtmlMeta();
meta.Name=“机器人”;
meta.Content=“noindex,follow”;
this.Page.Master.FindControl(“cphPageMetaData”).Controls.Add(meta);
}
使用以下母版页:

<%@ 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>

...
网站名称在这里
...

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


包含
代码的JavaScript代码已从
head
部分删除,并放置在
body
部分。

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

Private Shared MetaLanguage As String =
    String.Format("<meta http-equiv=""Content-Language"" content=""{0}""/>", CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)
私有共享元语言作为字符串=
String.Format(“,CultureInfo.CurrentUICulture.TwoLetterIsLanguageName)
然后把它们放在你的脑袋里,就像这样:

<head runat="server">
    <%=MetaLanguage%>
</head>

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

MetaDescription=“您的MetaDescription在此显示”;
MetaKeywords=“关键字1、关键字2、关键字3”

我认为这是最好的方法:

this.Page.Header.Controls.Add(new LiteralControl(@"<meta ... />"));
this.Page.Header.Controls.Add(新的LiteralControl(@“”);

享受吧

好的。。。实际上我只使用C#。。。或将HTML转换为C#。我从不在文件aspx中使用codebehind、designer或WebControl。。。所以我把所有的课程都安排好了。。。而且是动态的

结果:

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

抱歉-代码太长,无法作为评论发布,因此我在下面添加了一个答案(使用您的代码)。非常感谢!我知道有点晚了,但是有没有什么原因让你选择使用
LiteralControl
来覆盖一个?另外,我认为这并不能回答OPs的问题,因为标头不是服务器控件。页眉将为空
this.Page.Header.Controls.Add(new LiteralControl(@"<meta ... />"));
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);