好吧,,,我從同樣的問題遭遇,我想出了一個解決辦法,請查看我的回答這樣一個問題:
Hierarchical menu in view based on parent child class
我一直想出自從我遇到問題以來,這是一種更通用的優雅方式,但自那以後我一直很忙。我希望我會找到在未來幾週一些時間來的東西,,,
注意:在我的解決方案爲簡單起見,在對上述問題的方法DisplayMenu
和ConvertToItem
特殊性,我刪除了應檢查currentMenuID
和currentMenuItemID
字段的部分,並將current
css類添加到li元素(或在您的案例中爲active
類)。
因爲這就是你的問題所在,所以我提供了下面的全部方法。
public static string DisplayMenu(this HtmlHelper helper, NavigationModel navigationMenu)
{
string classOfCurrentMenu;
String result = "<ul id='main-nav'>\n";
foreach(Menu menu in navigationMenu.Menus)
{
classOfCurrentMenu = "";
if (menu.ID == navigationMenu.currentMenuID)
{
classOfCurrentMenu = "current";
}
result += "<li>\n";
result += string.Format("<a href='#' class='{0}'> {1} </a>\n", helper.AttributeEncode(classOfCurrentMenu),helper.AttributeEncode(menu.Name));
result += "<ul>\n";
foreach(MenuItem item in menu.MenuItems)
{
result += NavigationHelper.ConvertToItem(helper, item, navigationMenu.currentMenuID, navigationMenu.currentMenuItemID);
}
result += "</ul>\n";
result += "</li>\n";
}
result += "</ul>\n";
return result;
}
private static string ConvertToItem(this HtmlHelper helper,MenuItem item, int currentMenuID, int currentMenuItemID)
{
if (item.Show)
{
string classOfCurrentItem = "";
if (item.ID == currentMenuItemID && item.MenuID == currentMenuID)
classOfCurrentItem = "current";
return string.Format("<li><a href='{0}' class='{1}'>{2}</a></li>\n", helper.AttributeEncode(item.Link), helper.AttributeEncode(classOfCurrentItem), helper.AttributeEncode(item.Label));
}
else { return ""; }
}
我不認爲這是一個完美的解決問題的辦法,我討厭在C#代碼編寫HTML,我會盡我所能,拿出一個更通用(多級)清潔的解決方案的問題,當然也可以在框架中使用TagBuilder
類。
哇,這是有幫助的。我已經搜索和搜索,沒有發現任何真正有用的東西在這個問題上。我會試試這個。 – 2010-10-31 22:38:05