나는 다음과 같이 주어진 강력한 형식의 컨트롤러/액션 메뉴 항목에서 쓰는 내 응용 프로그램에 대한 도우미 쓰고 :이 과정의 일환으로, 신청하고자비교 두 RouteValueDictionary 인스턴스
<%= Html.MenuLink<WhateverController>(c => c.WhateverAction(), "Whatever") %>
을 현재 페이지와 링크 된 페이지가 동일하면 active
의 클래스가 출력 된 링크에 연결됩니다. 가장 좋은 방법은 현재 요청에 대한 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));
그러나 작동하지 않는다. 나는 완전히 잘못된 나무를 짖고 있니?