我寫我的應用程序的輔助,其寫出一個菜單項,對於給定的強類型的控制器/動作如下:比較兩個RouteValueDictionary實例
<%= Html.MenuLink<WhateverController>(c => c.WhateverAction(), "Whatever") %>
作爲這一過程的一部分,我想申請active
到輸出鏈接的類如果當前頁面和鏈接的頁面是相同的。我認爲這樣做的最好方法是將當前請求的RouteValueDictionary
的內容與給予輔助方法的表達式的結果進行比較。但是,我無法找出比較兩個RouteValueDictionary
中的項目是否相同的好方法。
有沒有簡單的方法來做到這一點?我想有效地完成它以下列方式:
public static string MenuLink<T>(this HtmlHelper html, Expression<Action<T>> action, string linkText) where T : Controller
{
// var link = html.ActionLink<T>(action, linkText, new {}); // Not important yet
var routeValues = Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression<T>(action); // Might change?
var currentRouteVals = html.ViewContext.RouteData.Values;
bool isActivePage = /* are the contents of routeValues also
inside currentRouteValues? */
var tb = new TagBuilder("li");
// Continues...
}
我已經嘗試使用內置的比較(==),但它似乎是使用默認的平等來實現,因此返回false,因爲它們是不一樣的例子。我也嘗試了以下內容:
bool isActivePage = routeValues.All(x => currentRouteVals.ContainsValue(x));
但這也行不通。我完全吠叫錯了樹嗎?