2016-04-04 4 views
0

Ich versuche, eine Set-Metadaten programmgesteuert festlegen.Setzen von Title-Tags mit asp.net

Ich habe folgendes Setup auf meiner asp.net Masterseite:

<asp:ContentPlaceHolder ID="MetaTags" runat="server"> 
    <meta name="description" content=""> 
</asp:ContentPlaceHolder> 

und ich diese dann auf einer einzelnen Seite:

<asp:Content runat="server" ContentPlaceHolderID="MetaTags">  
<title runat="server" id="pageTitle"></title> 
<meta runat="server" id="pageDescription" name="description"/> 
<meta runat="server" id="pageKeywords" name="keywords" />  
</asp:Content> 

Und diese in der C# -Code:

pageTitle.InnerText = "TITLE"; 
    pageDescription.InnerText = "DESC"; 
    pageKeywords.InnerText = "KEY"; 

Welche generiert dies auf der Seite:

<title id="ctl00_MetaTags_pageTitle">TITLE</title> 
<meta id="ctl00_MetaTags_pageDescription" name="description">DESC</meta> 
<meta id="ctl00_MetaTags_pageKeywords" name="keywords">KEY</meta> 

Ich bin es so zu tun, weil mein Verständnis ist, weil ich benutze:

<asp:ContentPlaceHolder ID="MetaTags" runat="server"> 

ich einen <head> Tag auf einzelnen Seiten nicht haben kann - weil es doppelte Header-Tags verursacht?

Ich habe versucht, mit:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="###" MasterPageFile="#####" Title = ""%> 

und in C# Page.Title = "Title"

aber nichts an hat.

Und separat Master.Page.Title = "Title";

aber entweder nicht funktioniert hat.

Also, 2 Teile zu meiner Frage;

1.Kennt jemand eine andere Möglichkeit, Metadaten programmgesteuert zur Seite hinzuzufügen.

2. Wenn ich es auf diese Weise tun, und die Meta-Daten hat ids zB:

<title id="ctl00_MetaTags_pageTitle">TITLE</title> 

Enthält diese den Titel-Tag ungültig.

Antwort

1

1.Wissen jemand eine andere Möglichkeit, Metadaten der Seite programmgesteuert hinzuzufügen.

Sie können dies erreichen, indem einfach ein Placeholder erstellen und dann Ihre individuellen Meta-Tags in Ihrem Code-Behind-Gebäude und das Hinzufügen von ihnen zu ihm:

<head runat="server"> 
    <title>Your Example Page</title> 
    <!-- Add your Meta tags into this container --> 
    <asp:PlaceHolder ID="Meta" runat="server" /> 
</head> 

Und dann im Code-behind, könnten Sie bauen diese als HtmlMeta Kontrollen und einfach fügen sie sie wie erwartet:

// Build each of your meta tags and add them 
var tags = new List<HtmlMeta>() { 
    new HtmlMeta() { Name = "description",Content = "Your Description Here" }, 
    new HtmlMeta() { Name = "keywords", Content = "a,b,c,d" }, 
    new HtmlMeta() { Name = "robots", Content = "index,follow" } 
}; 

// Add each of them to your placeholder 
foreach(var tag in tags) 
{ 
    Meta.Controls.Add(tag); 
} 

, die in Ihrem <head> Abschnitt wie folgt machen würde:

<head> 
    <title>Your Example Page</title> 
    <meta name="description" content="Your Description Here"> 
    <meta name="keywords" content="a,b,c,d"> 
    <meta name="robots" content="index,follow"> 
</head> 

Sie können dies leicht anpassen, wie Sie für richtig halten.

2.Wenn ich es so mache, und die Metadaten haben ids ... Macht dies das Titel-Tag ungültig?

IIRC, ich glaube nicht, dass dies keine negativen Auswirkungen auf den tatsächlichen <meta> Tag haben wird wie erwartet funktioniert, obwohl the spec doesn't specify it as a valid tag. Im Allgemeinen sollten Sie diese jedoch möglichst nicht hinzufügen.

Verwandte Themen