2011-08-15 84 views
4

我在我的MVC應用程序的共享_layout.cshtm文件(母版頁)中有幾個列表項。從子頁面在MVC的母版頁上選擇右側菜單

類似:

<ul> 
    <li>Home</li> 
    <li>about</li> 
    <li>contact</li> 
    <li>blog</li> 
</ul> 

當用戶在一個網頁,我想回家li項目有selected類,如下所示:

<li class="selected">Home</li> 

等。做這個的最好方式是什麼?

在常規的asp.net網站,我曾經有一個在母版頁中的方法,並從子頁面調用該方法,但在MVC中,我不知道該怎麼辦。

謝謝。

回答

11

你可以寫一個自定義的helper方法:

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("selected"); 
    } 
    li.SetInnerText(text); 
    return MvcHtmlString.Create(li.ToString()); 
} 

然後:

<ul> 
    @Html.MenuItem("Home", "home", "home") 
    @Html.MenuItem("About", "about", "home") 
    @Html.MenuItem("Contact", "contact", "home") 
    @Html.MenuItem("Blog", "blog", "home") 
</ul> 

的輔助檢查當前的動作和控制器,如果他們匹配一個作爲參數傳遞給幫手它通過將selected CSS類附加到li

+1

嗨,我會在哪裏添加這個? – LocustHorde

+1

@LocustHorde,你可以將它定義爲'HtmlHelper'類的擴展方法。你可以把它放在你想要的任何靜態類中。有關編寫自定義HTML助手的更多信息,請參閱以下文章:http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs –

0

只是想分享我做什麼:

我創建的文件夾App_Code並添加CustomHelpers.cshtml。在這裏面我創造這樣的事情:

@helper MainMenu(string SelectedItem) { 
    <ul class="MainMenu"> 
     <li><a href="/home" @if (SelectedItem == "Home") { <text>class="Active"</text> }>Home</a></li> 
     <li><a href="/about" @if (SelectedItem == "About") { <text>class="Active"</text> }>About</a></li> 
     <li><a href="/foo" @if (SelectedItem == "Foo") { <text>class="Active"</text> }>Foo</a></li> 
    </ul> 
} 

比我的母版(_Layout.cshtml)我添加此,我想我的菜單apear:

@CustomHelpers.MainMenu(ViewBag.SelectedMenu) 

而不是在我看來,就像我改變我的網頁標題,我改變我的選擇菜單:

@{ 
    ViewBag.Title = "Welcome to my homepage"; 
    ViewBag.SelectedMenu = "Home"; 
} 

得到了本教程中我的想法:www.asp.net/mvc/videos/mvc-3/mvc-3-razor-helpers