ステップ 7 ハンズオン : ASP.NET 2.0 Web サイト ナビゲーションの実装 その 2

XMLファイルを利用したメニュー操作


グローバル ナレッジ ネットワーク株式会社
ナレッジ ソリューション本部 鈴木和久

最終更新日 2005 年 11 月 11 日

目標 ASP.NET 2.0 の Menu コントロールからの XML ファイルの利用
使用技術
  • ASP.NET 2.0
  • Visual Basic 2005
取り上げるトピックス
  • ASP.NET 2.0 Menu コントロール
前提知識
目次
備考  

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 クラスを利用したサイト ナビゲーション』について説明します。

ページのトップへ