ナビゲーションメニューの制御
概要
ナビゲーションメニューの表示・非表示を制御(たとえば権限などで)したい場合、メニュー項目を削除することで非表示とします。
図.1
手順
図.1のようなナビゲーションメニューに対して「パソコン・オフィス用品」と「食品&飲料」メニュー項目を見せたくない場合、Removeメソッドで項目を削除してしまいます。
protected void Page_Load(object sender, EventArgs e) { //権限などに見立てて bool PC = false; bool HOME = true; bool FOOD = false; bool BOOK = true; NavigationMenu.Items[1].ChildItems.RemoveAt(2); if (!PC) { MenuItem pc = NavigationMenu.FindItem(@"パソコン・オフィス用品"); if (pc != null) { NavigationMenu.Items.Remove(pc); } } if (!HOME) { MenuItem home = NavigationMenu.FindItem(@"ホーム&キッチン・ペット"); NavigationMenu.Items.Remove(home); if (home != null) { NavigationMenu.Items.Remove(home); } } if (!FOOD) { MenuItem food = NavigationMenu.FindItem(@"食品&飲料"); NavigationMenu.Items.Remove(food); if (food != null) { NavigationMenu.Items.Remove(food); } } if (!BOOK) { MenuItem book = NavigationMenu.FindItem(@"本・コミック・雑誌"); NavigationMenu.Items.Remove(book); if (book != null) { NavigationMenu.Items.Remove(book); } } }
また、サブメニューを見せたくない場合は子要素を指定して削除します。
MenuItem homeMenu = NavigationMenu.FindItem(@"ホーム&キッチン・ペット"); if (homeMenu != null) { homeMenu.ChildItems.RemoveAt(1); }
MSDNを見るとサブメニューは以下のように取れると書いてあるのですが、うまく動きませんでした。
// Retrieve the Movie submenu item from the ChildItems // collection of the root menu item. MenuItem movieSubMenuItem = NavigationMenu.FindItem(@"Home\Movies"); // Remove the Movie submenu item. if (movieSubMenuItem != null) { homeMenuItem.ChildItems.Remove(movieSubMenuItem); }
何でだろ?と思いよくよく読んでみたら、ページの一番下に間違えが指摘してありました。
@"Home\Movies" ←間違い
@"Home/Movies" ←正しくはスラッシュでした。
バックスラッシュと間違えて書いてしまったんでしょうね。
ですので上の処理は以下のように書き換えられます。
MenuItem homeSubMenu = NavigationMenu.FindItem(@"ホーム&キッチン・ペット/インテリア・家具・寝具"); if (homeSubMenu != null) { home.ChildItems.Remove(homeSubMenu); }
複数のリスト項目を削除する場合を考慮すると、名称で処理を制御するべきですね。
参考
Amazonの商品カテゴリ