- ベストアンサー
ASP.Net MenuItemDataBoundでメニュー項目の表示・非表示を制御する方法について
- ASP.NetのMenuItemDataBoundを使用して、メニュー項目の表示・非表示を制御する方法についてご教授いただけませんか。
- ロールの種別によってメニューに表示される項目を制御したいですが、うまくいきません。
- 現在、新規という項目があり、Observerというロールの場合は非表示にしたいですが、正しく動作しません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まずはブレイクポイントを指定したのにデバッグ実行でひっかからない、というところを 解決するのがよさそうです。 この手のコントロールだと、ポストバック時はもともとコントロールが保持していた値をもとに 表示する値を作成するようになっていて、データのバインディングが発生しないことがあります。 最初この状態かな、と思ったのですが、デバッグを開始したとき(一番最初)もブレイクポイントで 止まらないんですよね? あと考えられることは、メニューコントロールに表示する項目をどう作っているか、というあたり ですかね。 http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.menu.aspx ここに記述のある「静的データ」の形式、つまりMenuItemを使っているようなときは、そもそも データのバインディングを行っていないのでMenuItemDataBoundというイベントが発生しないんじゃ ないかと思います。
その他の回答 (1)
- onos
- ベストアンサー率81% (127/155)
このようにプログラムを記述したことで ・どのような結果となっているのか ・期待していた結果はどのようなものなのか といった内容が記述されないことには、あなたの手元で何がおきているのか誰も推測できないかと。 あと、どういったことを調べていて、どこまでのことがわかっているか。 たとえばブレークポイントでとめて1行ずつ動作させて、実際のデータの内容と 動きをどこまで追いかけているか、等の情報もきちんと記述してください。
補足
onosさん お世話になっております。 説明不足で大変申し訳ございません。 まず、MenuItemDataBound でYahooで検索して http://msdn.microsoft.com/ja-jp/library/system.web.ui.webcontrols.menu.menuitemdatabound.aspx こちらのサイトを発見して、メニューのデータをバインドするイベントの記述の仕方を探しました。 MenuEventArgs にて、カスタム コンテンツを追加したり、メニュー項目を表示する前に変更するなど出来るとの記述があったので、プロパティを調べてみると、Enabled があったので、そこに False を設定しました。 さっそく実行してみたのですが、メニューから指定項目が消えていなかったので、一番初めの IF のところにブレイクポイントを設定して、デバックしてみたのですが、デバックに引っかかりません。 これは、わたくしが記述した内容自体が間違いかもしれないので、新たに、MenuItemDataBound で他の記事を検索したのですが、メニューを編集しているようなサイト記事がなかったので、こちらにて質問させていただきました。 (1)そもそもメニューを編集するのは このイベントでよいのか? (2)ブレイクポイントを設定したのになぜ、デバックに引っかからないのか? (3)わたくしが認識しているこのイベント自体、まったく間違いなのかどうか? (4)メニューを編集するには他の方法があるのか? おおよそ上記4つが知りたいと思っております。 何卒よろしくお願い申し上げます。
お礼
onosさん 大変お世話になっております。 なるほど、静的データだとイベントが発生しない! メニューの編集は、メニュー編集の編集というメニュー項目エディターで行っておりますので、onosさんのおっしゃる通り、静的データに該当するのでしょうね! イベントが発生しないのでは、どうにもなりませんね! 大変勉強になりました。 考え方を変えて、MenuItemClickイベントで解決策を練ろうとかと思っております。また壁に当たりましたら、何卒ご教授いただければと存じます。 ありがとうございました。