2011-02-22 2 views
12

navbar에 Html.ActionLink 도우미를 사용하는 작은 MVC 사이트가 있습니다. 한 가지 내가 바꾸고 싶은 것은 기본 ActionLink가 현재 페이지 인 경우에도 페이지에 대한 HTML 링크를 렌더링한다는 것입니다. 당신이/myURL이 이미 경우에도현재 사용중인 페이지를 알고있는 사용자 정의 ActionLink 도우미

<a href="/myUrl">Some title...</a> 

: 예를 들어

는,이 같은 링크를 만듭니다.

<a href="#" class="currentPageCSS">My Url</a> 
<a href="/someOtherUrl">Some Other Url</a> 

이 문제는 MVC 사이트의 부하를 전에 발생하므로되어 있어야 내가 ':이처럼 해당 링크를 해제하고 어쩌면 현재 방문 페이지를 표시하는 특수 CSS 클래스를 삽입한다면 그것은 좋은 것입니다 다른 사람들이 어떻게 그것을 다루었는지 궁금하다.

답변

32

이것은 사용자 지정 HTML 도우미를 굴리는 좋은 시나리오처럼 보입니다.

public static class LinkExtensions 
{ 
    public static MvcHtmlString MyActionLink(
     this HtmlHelper htmlHelper, 
     string linkText, 
     string action, 
     string controller 
    ) 
    { 
     var currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action"); 
     var currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller"); 
     if (action == currentAction && controller == currentController) 
     { 
      var anchor = new TagBuilder("a"); 
      anchor.Attributes["href"] = "#"; 
      anchor.AddCssClass("currentPageCSS"); 
      anchor.SetInnerText(linkText); 
      return MvcHtmlString.Create(anchor.ToString()); 
     } 
     return htmlHelper.ActionLink(linkText, action, controller); 
    } 
} 

을하고 내부보기 : 그래서 그것을 롤하자

<%= Html.MyActionLink("hello foo", "Index", "Home") %> 
<%= Html.MyActionLink("hello bar", "About", "Home") %> 
... 

하고 도우미가 적절한 앵커를 생성 위치에 따라 달라집니다.

+3

좋은 아이디어! 나는 그것을 뻔뻔스럽게 훔쳐서 통합 할 것입니다. – Iain

+0

@Iain, 제발 스스로 봉사하십시오 :-) –

+0

이 수업을 어디에 두어야하며 어떻게 포함합니까? –

관련 문제