SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

ASP.NETによるインクリメンタルナビゲーションの実装

フレームワーク「Theseus」を使用したWebサイトへの実装手順

ダウンロード ソースコード (310.6 KB)

全ページで利用するカスタムベースクラス:TheseusPage

 Theseusフレームワークの基本となるクラスはTheseusClassです。このクラスはLoadSectionMenuLoadSideMenuなどのメソッドを定義しており、TopMenus.ascxユーザーコントロールとSideMenu.ascxユーザーコントロールでそれぞれのナビゲーションユーザーインターフェース要素にデータをロードするために使われます。このクラスはWebサイトのすべてのページで使われるので、TheseusPageというカスタムベースページクラスを用意し、TheseusというプロパティでTheseusClassクラスのインスタンスを返すようにしました。従って、Theseusフレームワークを利用するASP.NET Webページはすべて、このカスタムベースクラスから継承して作成する必要があります。

 マークアップとコードが同一ファイルにあるASP.NETページを作成する場合、Web.configファイルで<pages>セクションのpageBaseType属性を使って、TheseusPageをすべてのページのベースクラスにできます。

<pages pageBaseType="Wingspan.Web.Core.TheseusPage">

 ASP.NETページのマークアップとコードを2つのファイルに分ける場合は、それぞれの分離コードファイルで、各ページの継承元ベースクラスをSystem.Web.UI.PageからWingspan.Web.Core.TheseusPage(または自分で定義したカスタムベースクラス)に変更する必要があります。

public partial class MyPage : Wingspan.Web.Core.TheseusPage
{
   ...
}

 カスタムベースページクラスの使い方と利点の詳細については、「Using a Custom Base Class for your ASP.NET Pages' Code-Behind Classes」を参照ください。

Theseusのエンジン:TheseusClass

 Theseusフレームワークの基本となるクラスTheseusClassは、次の2つの重要なタスクを行います。

  • 表示するページに応じて、サイトタブ、セクションメニュー、およびサイドメニューにサイトマップのどの項目を表示するかを判別します。
  • 現在位置情報を把握して、ナビゲーションUIのどの項目を強調表示するかを判別します。

 これらのタスクは、ASP.NETのSiteMapクラスを利用して実現できます。SiteMapクラスはASP.NETフレームワークのクラスで、「サイトのナビゲーション構造のインメモリ表現であり、1つ以上のサイトマッププロバイダにより提供されます」。

 SiteMapクラスで最も重要なプロパティはCurrentNodeです。このプロパティは、サイトマップ構造内の、現在要求されているページに対応するSiteMapNodeオブジェクトを表します。

SiteMapNode cn = SiteMap.CurrentNode;

 要求されたページがWeb.sitemap内のノードで表現されていない場合には、CurrentNodeはnullを返します。この場合にはTheseusは「非アクティブ」状態になり、いずれのタブも強調表示されていないサイトメニューだけが表示されます。

 SiteMapクラスのもう1つの重要なプロパティはRootNodeです。このプロパティは、サイトマップの階層構造のルートを表すSiteMapNodeを返します。CurrentNodeプロパティとRootNodeプロパティを使うと、現在位置情報を特定できます。当然のことながら、現在位置情報は、現在のノードとルートノードの間のパスとなります。

SiteMapExtensionsクラス

 Theseusでは、現在位置情報をSiteMapNodeオブジェクトのListとして計算する必要があります。MicrosoftがSiteMap.CurrentBranchのようなプロパティを用意してくれていたらよかったのですが、これはありません。幸い、このListは数行のコードで計算できます。現在位置情報のListの計算以外にも、Theseusで実行する必要があって、SiteMapクラスに実装されていないタスクがあるので、それに対応するメソッドやプロパティをSiteMapExtensionsというクラスにまとめました。このクラスはTheseusClassクラスから参照され、そこではSiteMapExtensionsタイプのメンバ変数SiteMapExtenderが定義されています。

namespace Wingspan.Web.Core
{
   public class TheseusClass
   {
      SiteMapExtensions SiteMapExtender;

      public TheseusClass()
      { 
         SiteMapExtender = new SiteMapExtensions();
      } 
       
      ...
   }
}

 SiteMapExtensionsクラスのコードは単純で、コメントによる説明も挿入してあります。このクラスでは、現在位置情報を表すSiteMapNodeListを返すCurrentBranchプロパティ、サイトマップ階層における現在のノードのレベルを返すCurrentNodeLevelプロパティ、およびいくつかのメソッドを定義しています。

次のページ
TheseusClassの詳細

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Andrew Wrigley(Andrew Wrigley)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4175 2009/08/06 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー