好的,我的網站是www.kristianbak.com。MVC2中活動視圖的亮點?
我有一個叫做activebutton
的css類。我希望在其他視圖處於活動狀態時進行更改。目前它只是在HTML(sitemaster)中進行硬編碼。
任何人有一個好主意?
好的,我的網站是www.kristianbak.com。MVC2中活動視圖的亮點?
我有一個叫做activebutton
的css類。我希望在其他視圖處於活動狀態時進行更改。目前它只是在HTML(sitemaster)中進行硬編碼。
任何人有一個好主意?
您可以測試當前的行動,如果它匹配應用CSS類:
<% if (ViewContext.RouteData.GetRequiredString("action") == "About") { %>
... highlight here
<% } %>
更妙的是我會寫一個HTML輔助生成菜單:
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("active");
}
li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
return MvcHtmlString.Create(li.ToString());
}
,然後用它像這樣:
<ul>
<%= Html.MenuItem("Home", "Home", "Home") %>
<%= Html.MenuItem("About Me", "About", "Home") %>
<%= Html.MenuItem("My Work", "Work", "Home") %>
<%= Html.MenuItem("Blog", "Index", "Blog") %>
...
</ul>
這會將active
類添加到錨如果cur租金請求與鏈接的操作和控制器相匹配。
的方法我開發感謝這個帖子:
頗爲相似。然而,答案有一個大問題。假設我們有3個鏈接: 首頁,關於和聯繫。
我們有4個控制器與默認索引操作。 HomeController中,AboutController,的ContactController和BiographyController。
現在,在關於頁面的內容,我們有鏈接傳頁,這在傳控制器調用指數行動。
但是,點擊傳記鏈接,我想保留關於頁面,因爲它是「關於」部分的一部分。
我在網上找到的大多數解決方案都不包括這個重要的部分。
我開發的解決方案不需要在視圖中使用會話或一些惡臭代碼。所有我們需要的是:
<%= Html.ActionMenuItem("Home", "Index", "Home") %>
<%= Html.ActionMenuItem("About", "Index", "About") %>
<%= Html.ActionMenuItem("Contact", "Index", "Contact") %>
由於解決這個問題很長我已經張貼在我的博客:
感謝您的回答,看起來很有希望!我應該在哪裏放置該輔助方法的代碼?在SiteMaster的CodeBehind內部?我如何在我的'NavButton'類中生成所有div等? – KristianB 2011-06-12 14:29:05
@KristianB,你應該把它放在一個靜態類中。這個靜態類可以放在例如'Extensions'文件夾中。只要確保將視圖中定義的靜態類的名稱空間引入到範圍中,以便助手變爲可見。請閱讀此處瞭解有關編寫自定義HTML幫助程序的更多信息:http://www.asp.net/mvc/tutorials/creating-custom-html-helpers-cs – 2011-06-12 14:32:18
您給了我一個主意......我只是嘗試使用會話變量我稱之爲'activeView'。在我的每個控制器中,我將這個變量設置爲特定的視圖。就像HomeController的Index()方法一樣,它會是'Session [「activeView」] =「Home」;'。然後,我在Sitemaster的代碼隱藏中添加了一些代碼,將該會話變量提取到可從SiteMaster本身訪問的屬性中。那麼這只是一個問題,是否可以通過我的方式。 – KristianB 2011-06-12 15:34:20