這是一個簡單的問題。 stackoverflow是如何在Asp.net MVC中執行菜單的,突出顯示了我們在上的頁面。在Asp.NET MVC中突出顯示的導航菜單?
回答
爲了達到這個目的,我編寫了一些代碼,其中有一部分使用了我的自定義擴展,如語言,繼續使用它,忽略小部分。
這個我放在我的部分頂部,包含菜單以獲取操作和控制器,以便我可以將此傳遞給擴展。
<% string currentAction = ViewContext.RouteData.Values["action"].ToString();
string currentController = ViewContext.RouteData.Values["controller"].ToString(); %>
這是側邊欄項目,基本上這將生成一個鏈接,您的自定義類「禮」的標籤,以表明是否鏈接在頁面/高亮當前使用。
public static string SidebarItem(this System.Web.Mvc.HtmlHelper html, string currentAction, string currentController, string action, string controller, string languageKey, params object[] args)
{
TagBuilder tb = new TagBuilder("li");
if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) && string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
{
tb.GenerateId("activemenu");
}
string text = html.Language(languageKey, args);
string link = html.ActionLink(text, action, controller).ToHtmlString();
tb.SetInnerText("{0}");
return String.Format(tb.ToString(), "<span>"+link+"</span>");
}
這裏是代碼的上述
<%= Html.SidebarItem(currentAction, currentController, "index", "home", "index") %>
見即這個URL
http://stackoverflow.com/questions
這表明可能是問題控制器處理這個頁面。因此它會更改查看以顯示突出顯示的菜單項。
這就是基本思想。我猜測Linq to SQL模型中涉及到一些分頁,除此之外。 – 2010-01-11 16:52:52
當然:)路由表,即 – 2010-01-11 16:54:29
堆棧溢出使用Linq to SQL模型? whaaaat? – nick 2011-01-15 20:45:13
有可能沒有MVC特殊的魔法,使這種情況發生。
我敢肯定:
if(HttpContext.Current.Request.Path == "some some menu url")
或
if(ViewContext_Or_ControllerContext.RouteData.Values["controller"] == "some value")
使用某處。
您可以將此代碼放在三個不同的位置(View(.aspx),ViewModel,Custom HtmlHelper),並且它們都需要相同的代碼位。
這將是基本的。我會嘗試找出最佳的方式來製作這個乾燥的...:P – DucDigital 2010-01-12 03:13:14
如果您查看頁面源,他們已將一個css類添加到<li>
元素以更改背景顏色。我猜測代碼會查看用戶訪問什麼控制器(問題,用戶等),並將該類添加到該部分的<li>
標記。
這是UI的基礎。 – DucDigital 2010-01-12 03:12:19
你可以使用HTML輔助創建菜單的實際使用情況。這樣所有的代碼都在一個地方。
SiteMap HtmlHelper ASP.NET MVC 有一些關於可用組件的信息。
1.首先創建extention
public class Extention
{
public static Dictionary<Menu, Menu> GetDictionary()
{
Dictionary<Menu, Menu> urls = new Dictionary<Menu, Menu>();
urls.Add(new Menu { Controller = "AppHome", Action = "Index" }, new Menu { Controller = "AppHome", Action = "Index" });
urls.Add(new Menu { Controller = "Home", Action = "Index" }, new Menu { Controller = "Home", Action = "Index" });
return urls;
}
}
public static class HtmlExtensions
{
public static MvcHtmlString ActionMenu(this HtmlHelper helper,String linkText,string actionName,String controllerName)
{
var tag= new TagBuilder("li");
if(helper.ViewContext.RequestContext.IsCurrentRoute(null,controllerName,actionName)||
helper.ViewContext.RequestContext.IsParentRoute(controllerName,actionName))
{
tag.AddCssClass("active");
}
else
{
tag.AddCssClass("inactive");
}
tag.InnerHtml = helper.ActionLink(linkText, actionName, controllerName).ToString();
return MvcHtmlString.Create(tag.ToString());
}
}
public static class RequestExtentions
{
public static bool IsCurrentRoute(this RequestContext context, String areaName)
{
return context.IsCurrentRoute(areaName, null, null);
}
public static bool IsCurrentRoute(this RequestContext context, String areaName, String controllerName)
{
return context.IsCurrentRoute(areaName, controllerName, null);
}
public static bool IsCurrentRoute(this RequestContext context, String areaName, String controllerName, params String[] actionNames)
{
var routeData = context.RouteData;
var routeArea = routeData.DataTokens["area"] as String;
var current = false;
if (((String.IsNullOrEmpty(routeArea) && String.IsNullOrEmpty(areaName)) || (routeArea == areaName)) &&
((String.IsNullOrEmpty(controllerName)) || (routeData.GetRequiredString("controller") == controllerName)) &&
((actionNames == null) || actionNames.Contains(routeData.GetRequiredString("action"))))
{
current = true;
}
return current;
}
public static bool IsParentRoute(this RequestContext context, String controller, String action)
{
var routeData = context.RouteData;
Menu returnUrl = null;
Menu requestUrl = new Menu { Action = routeData.GetRequiredString("action"), Controller = routeData.GetRequiredString("controller") };
Menu linkUrl = new Menu { Action = action, Controller = controller };
var urls = Extention.GetDictionary();
urls.TryGetValue(requestUrl, out returnUrl);
if (returnUrl != null && returnUrl.Equals(linkUrl))
return true;
else
return false; ;
}
}
的最佳方式 - 創建MVC助手(參見前面的答案) 但是,如果你不想這樣做,並希望很快做 - 記住新功能MVC 4.0帶有HTML標籤屬性的設置(屬性將被避免,如果它被設置爲空):
@{
string currentAction = ViewContext.RouteData.Values["action"].ToString().ToLower();
string classUpcomingTime = null;
string classArchive = null;
string classReporting = null;
switch (currentAction)
{
case "upcomingtime":
classUpcomingTime = "active";
break;
case "archive":
classArchive = "active";
break;
case "reporting":
classReporting = "active";
break;
}
<ul class="nav navbar-nav">
<li class="@classUpcomingTime">
<a href="/Vacancy/UpcomingTime">Open Vacancies</a>
</li>
<li class="@classArchive">
<a href="/Vacancy/Archive">Archive</a>
<li class="@classReporting">
@*<a href="#">Reporting</a>*@
<a href="/Vacancy/Reporting">Reporting</a>
</li>
</ul>
}
- 1. Asp.Net菜單突出顯示
- 2. 使用jquery突出顯示導航菜單中的父鏈接
- 3. 如何突出顯示導航菜單,指相同的URL
- 4. jquery導航突出顯示
- 5. jquery突出顯示菜單
- 6. KNP菜單 - 突出顯示父菜單
- 7. 在asp.net中顯示子菜單mvc
- 8. Android刪除導航菜單項突出
- 9. 導航菜單的菜單佈局未顯示在導航抽屜中
- 10. 如何突出顯示導航欄抽屜菜單中的選定項目
- 11. 導航div div中顯示主菜單
- 12. 航點菜單突出
- 13. 突出顯示ASP.NET Web應用程序中的菜單欄
- 14. 滑動突出顯示導航欄
- 15. 導航滾動突出顯示
- 16. JQuery導航突出顯示dropmenu.js
- 17. 「Jquery製表符」 - 在Asp.net mvc中的導航菜單樣式?
- 18. ASP.NET MVC ...導航和顯示錯誤
- 19. Qbasic突出顯示的菜單,認真
- 20. 導出WordPress導航菜單
- 21. 導航子菜單顯示不正確
- 22. Qt如何突出顯示菜單?
- 23. Jquery突出顯示活動菜單
- 24. 突出顯示活動菜單項
- 25. 活動路線在流星中突出顯示的導航欄
- 26. 單擊菜單項時顯示導航下拉菜單
- 27. 單擊菜單時如何突出顯示菜單
- 28. Angular Routing:突出顯示父菜單項的子菜單項
- 29. 如何在ASP.Net中突出顯示動態加載的菜單項?
- 30. 導航/菜單顯示在幻燈片後面的Internet Explorer中
我相信我們做的事情非常相似:http://stackoverflow.com/questions/7970660/best-way-of-mark-the-current-navigation-item-in-a-menu/8041629#8041629 – Chris 2011-11-08 02:27:23