Mr.Tの場所

特攻野郎Aチームじゃないよー

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  206  : 記事  0  : コメント  838  : トラックバック  43

ニュース

  • 性別:男
  • 猫1:まる
  • 猫2:もろ
  • 猫3:にゃん左部郎
  • タバコ:男は黙ってJPS
[わんくま同盟] C#, VB.NET 掲示板
フィードメーター - Mr.Tの場所

書庫

日記カテゴリ

Mr.Tです、こんにちは。

オレだけはまったMemo。

ASP.NETのMenuコントロールとMenuItemオブジェクトを利用してMenuを作った際に、はまった。
解決はできていたのだが、挙動の理由がわからなかった。

もっと最初にピンとくればよかった。

MenuItemのヘルプにはこう書いてある。

同じメニュー レベルにあるメニュー項目は、それぞれの Value プロパティの値が一意であることが必要です。同一レベルの複数のメニュー項目でこの値が同じであると、Menu コントロールは各メニュー項目を区別できません。この場合、重複した値を持つメニュー項目をユーザーがクリックすると、最初にメニューに表示されているメニュー項目が選択されます。

これは、Valueをプログラム上で利用しないからといってValue=""としてはだめよ、ということだ。

<asp:Menu>

<Items>
        <asp:MenuItem Text="取込関連" Value="">
            <asp:MenuItem Text="各種マスタ取込" Value="***.aspx" NavigateUrl=""></asp:MenuItem>
            <asp:MenuItem Text="初期データ生成" Value="***.aspx" NavigateUrl=""></asp:MenuItem>
        </asp:MenuItem>
        <asp:MenuItem Text="帳票関連" Value="">
            <asp:MenuItem Text="一品毎表示" Value="***.aspx" NavigateUrl=""></asp:MenuItem>
        </asp:MenuItem>
        <asp:MenuItem Text="計算処理" Value="">
            <asp:MenuItem Text="計算" Value="***.aspx" NavigateUrl=""></asp:MenuItem>
        </asp:MenuItem>
</Items>

</asp:Menu>

これだと、一番最初の「各種マスタ取込」にあるメニューは利用できるが、その下のメニュー項目については、

例えば、「一品毎表示」をクリックすると、PostBackはされるが
「各種マスタ取込」に「一品毎表示」のValuePathを持ったMenuItemがないと、MenuItemClickイベントが発生しない

ためしに、「一品毎表示」のMenuItemと同じものを「各種マスタ取込」に含めてやると、実行される。Textを変更しても実行される
ので、ValuePathが同一ならOKという解釈である。

ただし、Valueそのものを指定しなかった場合やTextを指定しなかった場合は、片方に指定してる値がそのまま利用されるので

問題ない。

Text プロパティを設定し、Value プロパティを設定しないと、Value プロパティには Text プロパティと同じ値が自動的に設定されます。その反対も同様です。Value プロパティを設定し、Text プロパティを設定しないと、Text プロパティには Value プロパティと同じ値が自動的に設定されます。

 

わかってしまえば、こんなものです...

 

それと、NavigateUrlに指定すると、指定先URLにPostBackはされません。<A>タグでのリンクと同じ動きになります。

LinkButtonのようにあえて別ページにPostBackしたい場合は、MenuItemClickイベント内でValueにURL渡すなりして、

その値でServer.Transferするなどで、対処すればよさそうです。

投稿日時 : 2007年11月28日 17:25

コメント

No comments posted yet.

Post Feedback

タイトル
名前
Url:
コメント