12

HtmlHelper를 작성하여 미리 설정된 값으로 ActionLink를 렌더링하고 싶습니다. PageLink컨트롤러 내부에서 Html.ActionLink 및 Url.Action (...) 사용

<%=Html.PageLink("Page 1", "page-slug");%> 

예는 공지 된 작업 및 컨트롤러와 ActionLink를 호출하는 함수이다. "색인"및 "페이지".

HtmlHelperUrlHelperController 또는 클래스 내에 존재하지 않으므로 클래스 내부에서 동작에 대한 상대 URL을 얻으려면 어떻게해야합니까?

는 업데이트 : 단지

<a href="@Url.Action("ViewPage", 
        new { 
          controller = "Page", 
          slug = "my-page-slug" })">My Link</a> 

귀하의 확장 방법은 귀여운 짧은 될 수있다 Html.ActionLink("My Link", new { controller = "Page", slug = "page-slug" }) 또는 더 나은 아직, 사용하지만 추가 : 지금이 발생한 경험의 추가 삼년을 감안할 때, 여기 내 충고 실제 가치를 전혀 추가하지 않으면 서 시험되지 않은 또 다른 시험 지점과 고용에 대한 새로운 학습 요구 사항이 있습니다. 복잡한 시스템을 설계하는 것으로 생각하십시오. 안정성 (no), 가독성 (약간, )을 읽으면 속도 (없음) 또는 동시성 (none)을 추가하는 이유는 다른 움직이는 부분을 추가하는 이유입니다.

+0

+1 컨트롤러 내부에서'Url.Action' 호출에 대한이 질문에 대한 미래의 조사자를 지적 할 것입니다. - http://stackoverflow.com/questions/2031995/call-urlhelper-in-models-in-asp-net-mvc – brichins

답변

20

실지로 귀하의 질문을 분명히 이해하지 못했지만 시도하겠습니다.

같은 것을 당신이 설명처럼의 HtmlHelper 확장을 만들려고하려면 클래스에서 URL을 얻는에 대한 질문에 대해서는

using System; 
using System.Web.Mvc; 
using System.Web.Mvc.Html; 

namespace Something { 
    public static class PageLinkHelper 
    { 
     public static string PageLink(
      this HtmlHelper helper, 
      string linkText, string actionName, 
      string controllerName, object routeValues, 
      object htmlAttributes) 
     { 
      return helper.ActionLink(
       linkText, actionName, controllerName, 
       routeValues, htmlAttributes); 
     } 
    } 
} 

을, 당신이 그것을 구현하는거야 클래스의 종류에 따라 달라집니다. 당신이 Html 헬퍼 확장에서 현재 컨트롤러와 액션을 얻고 싶은 경우, 예를 들어, 사용자가 사용할 수 있습니다

string currentControllerName = (string)helper.ViewContext 
    .RouteData.Values["controller"]; 
string currentActionName = (string)helper.ViewContext 
    .RouteData.Values["action"]; 

을 당신이 컨트롤러에서 그것을 얻고 싶은 경우에, 당신은 (기본 클래스에서 속성/메서드를 사용할 수 있습니다 컨트롤러)를 사용하여 URL을 작성하십시오. 예 :

var url = new UrlHelper(this.ControllerContext.RequestContext); 
url.Action(an_action_name, route_values); 
+1

Excellent 대답. 정적 클래스에서 래핑하지 않고 시도했지만 헬퍼를 등록하지 않았습니다 .ActionLink (...). 감사. –

+0

아, System.Web.Mvc를 가져 오지 않았습니다. 내 잘못이야. –