kazuk は null に触れてしまった

C# / .NET 系技術ネタ縛りでお送りしております

タグアーカイブ: Menu

ASP.NET 4.0 で Menu コントロールのレンダリングのされ方


asp:Menu でおなじみ、 ASP.NET 2.0 では「死んじゃえばいいのに」扱いを私にされたメニューコントロールのレンダリングについて。

無駄に head に style を吐くのは

IncludeStyleBlock=”False”

で抑止できるようになりました。パチパチパチ

Menu.IncludeStyleBlock プロパティ (System.Web.UI.WebControls)

なんでもテーブルというテーブル厨だった ASP.NET 2.0 に対して ul/li でのリストレンダリングもできるようになりました。

<asp:Menu
ID=”Menu” runat=”server”
DataSourceID=”SiteMapDataSource1″
StaticDisplayLevels=”5″ IncludeStyleBlock=”False”
CssClass=”menu” RenderingMode=”List” >
<LevelMenuItemStyles>
</LevelMenuItemStyles>
</asp:Menu>

こんなマークアップでのHTML出力は以下のようになります。

<a href=”#Menu_SkipLink”>

<img alt=”ナビゲーション リンクのスキップ”

    src=”/WebResource.axd?d=むにゃむにゃ” width=”0″ height=”0″

    style=”border-width:0px;” /></a>

<div class=”menu” id=”Menu”>

<ul class=”level1″>

<li><a class=”level1″ href=”url”>title</a></li>

<li><a class=”level2″ href=”url”>title</a></li>

<li><a class=”level3 selected” href=”url”>title</a></li>

<li><a class=”level4″ href=”url”>title</a></li>

<li><a class=”level4″ href=”url”>title</a></li>

</ul>

</div>

<a id=”Menu_SkipLink”></a>

本体につけた CssClass は div に適用され、レベルは class で識別されます。 ってなわけで、 ul/li のネストに頼った CSS だと当然に段がつかねーになります。ってことで、今日の僕ははまってました。どうやら ul/li のネストで出すオプションはない模様です。

さらには div で囲むのを抑止する方法もなく…

Menu_SkipLink を抑止するとかどっかオプションあるんじゃないかな。ナイってこと無いよね!

つーわけで、結局コントロールのレンダリングが融通聞かなくてどっかから持ってきたCSSが当たらなくてウガーってなる伝統は守られております。(残念)

まぁ、こんな時は普段の自分なら即 ControlAdapter 書くんですが、今日はHTML書きモード(というか文書書き前のフォーマット決め)なのでコードは書かない!を通してどんな HTMLでるのかなー、じゃーCSSはこうだねーとかなり優しく応対してみました。

というわけで、久々に薄い話でした!

広告