2012-04-30 42 views
1

我有一些標籤在網頁頂部的當前查看的標籤:家園,功能,聯繫方式等DRY方法剃刀語法標記網頁

我需要的類我目前上被標記爲。

如何使用剃刀語法適當地編寫我的_Layout.cshtml頁面,以便我不必手動將每個頁面的相應選項卡標記爲class =「current」?

<li class="current">@Html.ActionLink("Home", "Index", "Home") 
<li>@Html.ActionLink("Blog", "Blog", "Home") 
<li>@Html.ActionLink("Portfolio", "Portfolio", "Home") 

回答

3

舉例說明你可以做到這一點。

@helper BuildLink(string name, string action, string controller) 
{ 
    var url = Url.Action(action, controller); 
    bool isActive = Request.Url.AbsolutePath.Equals(url, StringComparison.InvariantCultureIgnoreCase); 
    <li class="@(isActive ? "current" : String.Empty)"><a href="@(url)">@name</a></li> 
} 

@BuildLink("Home", "Index", "Home") 
@BuildLink("Blog", "Blog", "Home") 
@BuildLink("Portfolio", "Portfolio", "Home") 
+0

似乎是一個很好的計劃,但我得到這個錯誤:CS0103:「URL」的名稱不存在在當前上下文中 - 引用var url = Url.Action(action,controller); – Ecnalyr

+0

這很奇怪,我想說也許你沒有引用System.Web.MVC,但Html.ActionLink已經要求。您的母版頁是否繼承System.Web.Mvc.ViewMasterPage? (看看你的配置文件) – DMulligan

+0

Master這個詞根本不在我的項目中 - 所以我猜測不是。我將這一行添加到配置文件的命名空間部分: - 沒有幫助,我猜我做錯了。此外,直到現在,自生成應用程序以來,我對Web.config進行了零更改。 – Ecnalyr

0

您可以在每個控制器上設置ViewData [「Home」] =「activeTab」類,並在視圖中使用該信息。

如果採用viewData字典的值,這將使選項卡激活。 很簡單,很乾淨。

內部控制器集可視數據這樣

ViewData["SomeTab"] = "activeTab"; 
    return View("Index"); 

視點側:

<li class="<@ ((string)ViewData["SomeTab"] ?? "") >"><@Html.ActionLink("SomeTab", "Index", "Home")></li> 
<li class="<@ ((string)ViewData["MyPage"] ?? "") %>"><@Html.ActionLink("MyPage", "MyPage", "")></li> 
+0

謝謝,但我一直在尋找一種完全避免控制器的解決方案。 – Ecnalyr