Templates also provide the default tab menus (“Home” and “About”) and pretty nice CSS styles. If you look at the “Site.css” file, you can find the “ul#menu li.selected a” section, which styles the selected menu item. But the application template does not set the “selected” class to the selected menu item.
In this post, I will show you how to do this using the custom “Html Helper” method.
1. _Layout.cshtml
Menu items are defined in the layout file.
1
2
3
4
5
6
| <nav> <ul id="menu"> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> </ul></nav> |
2. Site.css
The default style of the selected menu is like this:
1
2
3
4
| ul#menu li.selected a { background-color: #034af3; color: #e8eef4;} |
The style expects that the selected menu item has the “selected” class.
3. Creating Html Helper Method
- Create a “HtmlHelpers” folder in your project
- Create a static class
- Define a static method with the first parameter “this HtmlHelper helper“
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| using System;using System.Collections.Generic;using System.Web;using System.Web.Mvc;namespace MyWebApp.WebUI.HtmlHelpers{ public static class HtmlHelperExtensions { public static string ActivePage(this HtmlHelper helper, string controller, string action) { string classValue = ""; string currentController = helper.ViewContext.Controller.ValueProvider.GetValue("controller").RawValue.ToString(); string currentAction = helper.ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString(); if (currentController == controller && currentAction == action) { classValue = "selected"; } return classValue; } }} |
4. Referring the Html Helper Method in a View
To refer to the helper method in a view, you need to include the namespace with the “using” statement
1
| @using MyWebApp.WebUI.HtmlHelpers |
Or you can modify the “Web.config” file in the “Views” folder. (Note that it is not the root config file.)
1
2
3
4
5
6
7
8
9
| <system.web.webPages.razor> <host ... /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> ... <add namespace="MyWebApp.WebUI.HtmlHelpers" /> </namespaces> </pages></system.web.webPages.razor> |
5. Modifying the View
Let’s change the menu.
1
2
3
4
5
6
| <nav> <ul id="menu"> <li class="@Html.ActivePage("Home", "Index")">@Html.ActionLink("Home", "Index", "Home")</li> <li class="@Html.ActivePage("Home", "About")">@Html.ActionLink("About", "About", "Home")</li> </ul></nav> |
If you want to add the “selected” class directly to the <a> element rather than <ul>element, you can do like this:
1
2
3
4
5
6
| <nav> <ul id="menu"> <li>@Html.ActionLink("Home", "Index", "Home", null, new { @class = Html.ActivePage("Home", "Index") })</li> <li>@Html.ActionLink("About", "About", "Home", null, new { @class = Html.ActivePage("Home", "About") })</li> </ul></nav> |
No comments:
Post a Comment