>
프로그래밍 방식으로 <meta> 를 추가하려고합니다. . Head 가있을 때 제대로 작동합니다   runat = "server" 와 요소   .aspx 에서  페이지.

뒤의 코드는 다음과 같습니다 :

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

그러나 <% ... %> 와 같은 코드 블록을 포함하는 헤드 태그에 스크립트가 있습니다. 그래서 나는 runat = "server" 를 유지할 수 없습니다  가치.

문제는 메타 태그가 데이터베이스의 값에 의존하기 때문에 프로그래밍 방식으로 메타 태그를 추가해야한다는 것입니다.

head 요소 내부의 스크립트가 정상적으로 작동하고 프로그래밍 방식으로 메타 태그를 추가 할 수 있도록이 문제를 해결하는 방법이 있습니까?


  • 답변 # 1

    확인,채식 자의 답변을 테스트했으며 완벽하게 작동합니다.

    <header> 에서  섹션 :

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

    Visual Studio는 PlaceHolder 태그에 헤더 내의 알려진 요소로 인식되지 않기 때문에 경고를 표시 할 수 있지만이를 무시할 수 있습니다. 작동합니다.

    C # 코드에서 :

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

    대체로 ( <% %> 를 사용하는 코드 블록이 이미 있으므로  헤더 섹션에서 메타를 직접 태그하고 서버 측에서 값만 검색 할 수 있습니다.

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

  • 답변 # 2

    솔루션에 감사드립니다. 다음과 같이 (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>
    
    

    다음 마스터 페이지 사용 :

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

    또는 메타 태그를 헤더에 ID와 runat = "server"로 넣은 다음 코드 뒤에

    myMetaTag.Content = "noindex,follow";
    
    

    또는

    myMetaTag.Visible = false;
    
    

    또는 당신이 원하는 무엇이든.

    <

    <% .... %>에서하고있는 것을 코드 숨김으로 옮기십시오. 스크립트를 사용하여 페이지에 내용을 추가하는 경우이를 asp : Literal 컨트롤로 바꾸고 스크립트 블록에서 이전에 계산 한 값을 코드 숨김으로 설정하고 Literal.Text를 해당 값으로 설정할 수 있습니다.

  • 답변 # 4

    이것이 최선의 방법이라고 생각합니다 :

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

    즐거워!

  • 이전 기본적으로 IPv6 대신 IPv4를 사용하도록 git 구성
  • 다음 audio - 파이썬에서 사인파 사운드 생성