ステップ 7 ハンズオン : ASP.NET 2.0 Web サイト ナビゲーションの実装 その 2
XMLファイルを利用したメニュー操作
グローバル ナレッジ ネットワーク株式会社
ナレッジ ソリューション本部 鈴木和久
最終更新日 2005 年 11 月 11 日
目標 | ASP.NET 2.0 の Menu コントロールからの XML ファイルの利用 |
使用技術 |
|
取り上げるトピックス |
|
前提知識 | |
目次 |
|
備考 |
XML ファイルを利用したメニュー操作
ここでは、Menu コントロールに XmlDataSource を適用した場合の使用例について説明します。
ページに管理者用の Menu コントロールを追加します。個々の Menu コントロールは、それぞれ異なる XML ドキュメントをメニュー定義に使用できますが、ここでは 2 つの Menu コントロールが共通の XML ドキュメントを使用しながら異なるメニュー項目を表示するように設定します。
Menu.xml ファイルを以下のように変更します。
Menu.xml ファイル
<?xml version="1.0" encoding="utf-8" ?>
<menuitems title="メニュー項目" url="">
<!-- 一般ユーザーのメニュー定義 -->
<items title="Home" url="~/Default.aspx" >
<item title="お知らせ" url="~/Announce.aspx" />
<item title="イベント" url="~/Event.aspx" />
<item title="QA" url="~/QAlist.aspx" />
</items>
<!-- 管理者用のメニュー定義 -->
<items title="管理者" url="~/Admin/Default.aspx">
<item title="ユーザー登録" url="~/Admin/AddUser.aspx" />
<item title="ユーザー削除" url="~/Admin/DelUser.aspx" />
<item title="障害記録" url="~/Admin/Report.aspx" />
</items>
</menuitems>
マスタ ページに配置済みの Menu コントロールの Menu タスク のメニューから [スキーマを最新の情報に更新] を指定して、変更後の XML ファイルの新しい定義を読み込みます。
その後、[MenuItem Databindings の編集] から Databindings の定義を変更し、それぞれの要素の TextField プロパティに title 属性、NavigateUrlField には url 属性を定義します。
Menu コントロールのデータソースである XmlDataSource コントロールの DataSource タスク メニューから [データソースの構成...] を指定して データソースの構成画面から 以下のような XPath 式を定義します。この XPath 式は一般ユーザー向けのメニュー項目の XML ノードを取得します。
XPath 式
menuitems/items[@title='Home']
管理者用のメニューを用意するため、新しい Menu コントロールをマスタ ページに配置します。
Menu タスク メニューの [データソースの選択] から <新しいデータソース...> を選択し、[XML ファイル]を選び Menu.xml ファイルを指定します。
Step 2 と同様な DataBindings 定義を行い、この Menu コントロールのデータソースとなっている XmlDataSource コントロールには、以下のような XPath 式を定義します。
/menuitems/items[@title='管理者']
以上で、共通の XML ドキュメントを使用して、一般ユーザー向けのメニューと管理者向けのメニューを分けることができます。
管理者ロールに所属しないユーザーには、管理者用のメニューを非表示にするとセキュリティが向上します。
ロールに所属しないユーザーにメニューを非表示にするために、マスタ ページの Page_ Load イベント ハンドラに以下のコードを記述します。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ShowAdminMenu( )
End Sub
Sub ShowAdminMenu( )
If My.User.IsInRole("Admin") Then
Menu2.Visible = True
Else
Menu2.Visible = False
End If
End Sub
管理者用のメニューはページにアクセスしたユーザーが管理者のロールを持つ場合と、持たない場合で表示が切り替わります。
管理者ロールを持つ場合、 「管理者」メニューが表示されます。
管理者ロールを持たない場合、「管理者」メニューは表示されません。
次に、『SiteMap クラスを利用したサイト ナビゲーション』について説明します。 |
ページのトップへ