Подтвердить что ты не робот

Добавление метатега программно в С#

Я пытаюсь программно добавить <meta>. Он работает нормально, когда есть элемент Head с runat = "server" на странице .aspx.

Код позади:

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

Но у меня есть script в теге head, который содержит кодовые блоки вроде <% ... %>, поэтому я не могу сохранить значение runat = "server".

Проблема заключается в том, что я должен добавить метатег программно, потому что он зависит от значения из базы данных.

Есть ли способ решить эту проблему, чтобы мой script внутри элемента head работал как обычно, и я могу добавить метатег программно?

4b9b3361

Ответ 1

Хорошо, я протестировал ответ veggerby, и он отлично работает:

В разделе <header>:

<asp:PlaceHolder id="MetaPlaceHolder" runat="server" />

Обратите внимание, что Visual Studio может показывать предупреждение в теге PlaceHolder, поскольку оно не распознается как известный элемент внутри заголовка, но вы можете игнорировать это. Он работает.

В коде С#:

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

В качестве альтернативы (поскольку у вас уже есть блоки кода с использованием <% %> в разделе заголовка), вы можете напрямую пометить мета и получить только значение со стороны сервера:

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

Ответ 2

Большое спасибо Благодарим за решение! Я реализовал этот код в пользовательском элементе управления ASP.NET(error404.ascx) следующим образом:

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

Со следующей главной страницей:

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

Ответ 3

Или вы могли бы просто поместить свой метатег в заголовок с идентификатором и runat = "server"... затем в коде позади say

myMetaTag.Content = "noindex,follow";

или

myMetaTag.Visible = false;

или что бы вы ни пожелали.

Ответ 4

Я думаю, что это лучший подход:

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

Наслаждайтесь!

Ответ 5

Попробуйте переместить все, что вы делаете в <%....% > , в код. Если вы используете script для добавления содержимого на страницу, вы можете заменить его элементом управления asp: Literal, а затем установить значение, которое вы ранее вычисляли в блоке script, для кода и установить Literal.Text к этому значению.

Ответ 6

Я не тестировал его, но, возможно, вы можете добавить <asp:Placeholder> внутри тега <head></head> и добавить к нему метатеги.

Ответ 7

Лучшее решение для этого, которое я успешно проверил без каких-либо ошибок или предупреждений:

Код JavaScript, содержащий код <% ... %>, был удален из раздела head и помещен в раздел body.

Ответ 8

Вы можете определить свой метатег как статическую строку следующим образом:

Private Shared MetaLanguage As String =
    String.Format("<meta http-equiv=""Content-Language"" content=""{0}""/>", CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)

Затем поместите их в голову так:

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

Это позволяет использовать любые значения метатега и легко читается и настраивается. Примечание. Использование ключевого слова Shared (статическое) помогает повысить производительность.

Ответ 9

MetaDescription = "Ваше метаописание идет здесь"; MetaKeywords = "Ключевое слово1, ключевое слово2, ключевое слово3";

Ответ 10

ОК... Я использую только С#... или HTML в С#. Я никогда не использую codebehind, designer или webcontrols в файле aspx... Поэтому я программирую все из классов... И динамически.

Результат:

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