ASP.NET MVC アプリケーションで ul/li メニューを作成しようとしています。メニューには 4 ~ 5 個のトップ メニュー項目が必要であり、各トップメニュー項目にはいくつかのサブメニュー項目を含むホバー/ドロップダウン メニューが必要です。完成したメニュー構造は、ドロップダウンのある通常の ul/li メニューのようになります。
<ul>
<li class="active">
<a>Topmenu 1</a>
<ul>
<li>Submenu1</li>
<li>Submenu2</li>
<li>Submenu3</li>
</ul>
</li>
<li class="inactive">
<a>Topmenu 2</a>
<ul>
<li>Submenu4</li>
<li>Submenu5</li>
<li>Submenu6</li>
</ul>
</li>
And so on...
</ul>
トップ メニュー項目には、「アクティブ」と「非アクティブ」のクラスが必要です。トップメニュー項目を生成するカスタム HtmlHelper を作成することで、この問題を解決しました。それは次のようになります。
public static MvcHtmlString MenuItem(
this HtmlHelper htmlHelper,
string text,
string action,
string controller
)
{
var li = new TagBuilder("li");
var routeData = htmlHelper.ViewContext.RouteData;
var currentAction = routeData.GetRequiredString("action");
var currentController = routeData.GetRequiredString("controller");
if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
{
li.AddCssClass("tab active");
}
else {
li.AddCssClass("tab inactive");
}
li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
return MvcHtmlString.Create(li.ToString());
}
この関数を次のように呼び出します。
@Html.MenuItem("Katalog", "Index", "Katalog")
この機能は非常にうまく機能します。残念ながら、トップメニュー<li>
項目全体が生成されています。したがって<ul>
、サブメニューアイテムをトップメニュー<li>
タグのどこかに配置する可能性はありません。
誰かがそのようなメニューを作る方法を知っていますか? または、<ul>
トップメニュー<li>
タグを取得する方法を教えてください。