2009-09-16 7 views
24

<meta>をプログラムで追加しようとしています。 .aspxページにrunat = "server"の要素がある場合は正常に動作しています。C#でプログラムでメタタグを追加

コードが背後にある:

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

しかし、私は<% ... %>ようなコード・ブロックが含まれているheadタグ内のいくつかのスクリプトを持っているので、私はrunat = "server"値を維持することはできません。

問題はデータベースからの値に依存するため、メタタグをプログラムで追加する必要があることです。

この問題を解決する方法はありますか?head要素内のスクリプトはいつものように動作し、プログラムでメタタグを追加できますか?

答えて

35

OK、私はanswer by veggerbyをテストし、それが完璧に動作します:

<header>セクションで

:それは認識されないため、Visual Studioが、プレースホルダタグに警告が表示される場合があります

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

に留意されたいです。ヘッダー内の既知の要素として扱いますが、これは無視できます。できます。 C#のコードで

:また

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

、あなたが直接メタタグを付けると、サーバー側からの値のみを取得することができます(あなたはすでにあなたのヘッダ部分に<% %>を使用してコードブロックを持っているので)

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

おかげで、それは完全に – subha

+0

謝罪の作品をたくさん助けた - コードは、コメントとして投稿するにはあまりにも長かったので、私は、以下の(あなたのコードを使用して)答えを追加しました。どうもありがとう! –

5

<%....%>で行っていることをコードビハインドに移動してみてください。スクリプトを使用してページにコンテンツを追加する場合は、asp:Literalコントロールに置き換えて、スクリプトブロックで前に計算した値をコードビハインドに設定し、Literal.Textをその値に設定します。

2

私はそれをテストしていませんが、おそらく<head></head>タグ内に<asp:Placeholder>を追加し、これにメタタグを追加することができます。

+0

おかげで多くのソリューションが私に – subha

6

それとも、ただの後ろ

myMetaTag.Content = "noindex,follow"; 

または

myMetaTag.Visible = false; 
を言うのコードで、その後... IDとrunat =「server」を使用し、ヘッダにあなたのメタタグを入れることができます

など、好きなものを入力してください。

7

Awe for the solutionに感謝します!私はこのコードを(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> 
0

私が正常に任意のエラーや警告なしにチェックこのための最善の解決策、:

JavaScriptコード、どの<% ... %>コードを含み、headセクションから削除され、bodyセクションに配置されました。

0

あなたがそうのような静的な文字列として、あなたのメタタグを定義することができます。

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

そして、そのようなあなたの頭の中でそれらを配置します。これは、あなたが任意のメタタグ値を使用できるようにする

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

と読みやすくカスタマイズするのが簡単です。注:Sharedキーワード(静的)を使用すると、パフォーマンスが向上します。

-3

MetaDescription = "あなたのメタ記述はここにあります"; MetaKeywords = "Keyword1、Keyword2、Keyword3";

6

私はこれが最善の方法だと思う:

​​

お楽しみください!

-3

OK ...私は実際にはC#のみを使用します...またはHTMLをC#で使用します。 私は決してコードビハインド、デザイナーまたは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); 
関連する問題