2009-09-16 10 views
24

Sto cercando di aggiungere codice un <meta>. Si sta lavorando bene quando c'è un elemento Head con runat = "server" nella pagina .aspx.L'aggiunta di meta tag a livello di codice in C#

Il codice è dietro:

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

Ma ho qualche script nel tag head che contiene blocchi di codice come <% ... %>, quindi non posso mantenere il valore runat = "server".

Il problema è che ho da aggiungere il meta tag a livello di codice, perché dipende da un valore dal database.

C'è un modo per risolvere questo problema in modo che il mio script all'interno dell'elemento testa funziona come al solito e posso aggiungere un meta tag di programmazione?

risposta

35

OK, ho provato la answer by veggerby, e funziona perfettamente:

Nella sezione <header>:

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

noti che Visual Studio potrebbe mostrare un avviso sul tag PlaceHolder, perché non viene riconosciuto come elemento conosciuto all'interno dell'intestazione, ma puoi ignorarlo. Funziona.

Nel codice C#:

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

alternativa (dal momento che si dispone già di blocchi di codice utilizzando <% %> nella sezione di intestazione), puoi taggare il meta direttamente e recuperare solo il valore dal lato server:

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

grazie mille funziona perfettamente – subha

+0

Scuse - il codice è stato troppo a lungo per inviare un commento così ho aggiunto una risposta (utilizzando il codice) al di sotto . Grazie molto! –

5

provare a spostare qualunque è che si sta facendo nel <% ....%> per il code-behind. Se si utilizza lo script per aggiungere contenuto alla pagina, è possibile sostituirlo con un asp: controllo letterale e quindi impostare il valore che si stava precedentemente calcolando nel blocco di script sul code-behind e impostare Literal.Text su tale valore.

2

Non l'ho provato, ma forse è possibile aggiungere un <asp:Placeholder> all'interno del tag <head></head> e aggiungere i meta tag a questo.

+0

Grazie mille la soluzione mi ha aiutato – subha

6

Oppure si può semplicemente mettere la vostra meta-tag nell'intestazione, con un ID e una runat = "server" ... poi nel codice dietro dire

myMetaTag.Content = "noindex,follow"; 

o

myMetaTag.Visible = false; 

o qualsiasi altra cosa desideri.

7

Molte grazie a Awe for the solution! Ho implementato questo codice in un ASP (error404.ascx).NET di controllo utente come segue:

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

Con la seguente masterpage:

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

La soluzione migliore per questo, che ho controllato con successo senza alcun errore o avviso:

Il codice JavaScript, che contiene il codice <% ... %>, è stato rimosso dalla sezione head e inserito nella sezione body.

0

Si potrebbe definire il meta tag da usare come stringa statica in questo modo:

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

poi metterli nella tua testa in questo modo:

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

Questo permette di usare qualsiasi valore meta-tag e è facile da leggere e personalizzare. Nota: l'uso della parola chiave Shared (statica) consente di migliorare le prestazioni.

-3

MetaDescription = "La meta description va qui"; MetaKeywords = "Parola chiave1, Parola chiave2, Parola chiave3";

6

penso che questo sia l'approccio migliore:

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

Enjoy!

-3

OK ... In realtà uso solo C# ... O HTML in C#. Non uso mai codebehind, designer o webcontrols nel file aspx ... Quindi programmo tutto dalle classi ... E dinamicamente.

Risultato:

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