.NET TIPS

[ASP.NET]<head>タグの内容を動的に生成するには?[2.0、C#、VB]

デジタルアドバンテージ 岸本 真二郎
2008/11/06

 ASP.NETでは、<body>タグの中身だけでなく、<head>タグに含まれる<title>タグや<meta>タグなども動的に生成できる。

<title>タグの生成

 <title>タグの内容を動的に生成するには、HtmlHeadクラス(System.Web.UI.HtmlControls名前空間)のTitleプロパティを使用する。HtmlHeadクラスのインスタンスは、PageオブジェクトのHeaderプロパティから参照できる。

 HtmlHeadクラスのTitleプロパティに文字列を設定すると、<title>タグにその内容がセットされる。なお、事前に<title>タグに記述されていた内容は消去(上書き)される。

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      Page.Header.Title = "ASP.NET サンプル";
    }
}
Partial Class _Default
    Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Page.Header.Title = "ASP.NET サンプル"
  End Sub
End Class
<title>タグを生成するコード例(上:C#、下:VB)

<meta>タグの生成

 SEOなどの目的で、<head>タグに<meta>タグを追加し、日付やキーワード、ページの概要などを設定する場合、動的に<meta>タグを生成してブラウザに返すことが可能だ。

 これを行うにはHtmlMetaクラス(System.Web.UI.HtmlControls名前空間)のインスタンスを作成し、<meta>タグとして生成する内容をセットして、HtmlHeadオブジェクトのControlsプロパティに追加する。

using System;
using System.Web.UI;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      HtmlMeta meta = new HtmlMeta();
      meta.Attributes.Add("name", "author");
      meta.Attributes.Add("content", "authorに関する情報");
      Page.Header.Controls.Add(meta);
    }
}
Partial Class _Default
    Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim meta As New HtmlMeta()
    meta.Attributes.Add("name", "author")
    meta.Attributes.Add("content", "authorに関する情報")
    Page.Header.Controls.Add(meta)
  End Sub
End Class
<meta>タグを生成するコード例(上:C#、下:VB)

<link>タグの生成

 HtmlLinkクラス(System.Web.UI.HtmlControls名前空間)を使用すると、CSSファイルを指定する場合に使用する<link>タグを生成できる。

 <meta>タグの場合と同様に、HtmlLinkクラスのインスタンスを作成し、CSSのファイル名、MIMEタイプなどを指定する。HtmlHeadオブジェクトのControlsプロパティにインスタンスを追加するのも、<meta>タグの場合と同様だ。

using System;
using System.Web.UI;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
      HtmlLink myHtmlLink = new HtmlLink();
      myHtmlLink.Href = "/style/MyStyleSheet.css";
      myHtmlLink.Attributes.Add("rel", "stylesheet");
      myHtmlLink.Attributes.Add("type", "text/css");
      Page.Header.Controls.Add(myHtmlLink);
    }
}
Partial Class _Default
    Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim myHtmlLink As New HtmlLink()
    myHtmlLink.Href = "/style/MyStyleSheet.css"
    myHtmlLink.Attributes.Add("rel", "stylesheet")
    myHtmlLink.Attributes.Add("type", "text/css")
    Page.Header.Controls.Add(myHtmlLink)
  End Sub
End Class
<link>タグを生成するコード例(上:C#、下:VB)

実行結果

 以上の3つのタグを動的に生成した場合の、元の.aspxファイルの内容と、ブラウザに返されたHTMLの内容を次に示す。

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>消されます</title>
</head>
<body>
  <form id="form1" runat="server">
  <div>
    headタグを動的に生成する
  </div>
  </form>
</body>
</html>
元のDefault.aspxの内容

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
 <title>ASP.NET サンプル</title>
 <meta name="author" content="authorに関する情報" />
 <link href="/style/MyStyleSheet.css" rel="stylesheet" type="text/css" />
</head>
<body>
  <form name="form1" method="post" action="Default.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGSz0gtj3UR7EyxqBOaHBkUBCHbzPw==" />
</div>
  <div>
    headタグを動的に生成する
  </div>
  </form>
</body>
</html>
ブラウザに送られたDefault.aspxの内容

 <title>タグの内容が上書きされ、<meta>タグと<link>タグが追加されているのが分かる。

 <meta>タグや<title>タグなどに記述する内容は、Web.configなどの外部の構成ファイルやデータベースなどに格納しておき動的に生成することで、記述内容を変更する場合にも再ビルドすることなくコンテンツが変更できるようになる。End of Article

利用可能バージョン:.NET Framework 2.0以降
カテゴリ:Webフォーム 処理対象:ページ
使用ライブラリ:HtmlHeadクラス(System.Web.UI.HtmlControls名前空間)
使用ライブラリ:HtmlMetaクラス(System.Web.UI.HtmlControls名前空間)
使用ライブラリ:HtmlLinkクラス(System.Web.UI.HtmlControls名前空間)

この記事と関連性の高い別の.NET TIPS
[ASP.NET]ページ・タイトルを実行時に設定するには?
[ASP.NET]ページのタイトルやメタ情報を動的に変更するには?
HTMLファイルを簡単に解析するには?
[ASP.NET]任意の画像を出力してブラウザで表示するには?
HTMLファイルからテキストを取り出すには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間