2010-04-06 2 views
1

UrlHelper로 정의 된 확장 방법이 URL에 추가되지 않은 이유는 무엇입니까? 확장판 컨트롤러에서 사용하고 싶을 때! 하지만 나는 그것에 접근 할 수 있습니까?컨트롤러의 UrlHelper 매개 변수를 사용하는 확장 메서드에 액세스 할 수 없습니다! 보기에서 그 반대도 마찬가지입니다.

public static string Home(this UrlHelper helper) 
{ 
    return helper.RouteUrl("ABC", new { controller = "ABC", Action = "Default" }); 
} 

은 내가하지 액세스 할 수 있습니다

public ActionResult Default() 
{ 
    return Redirect(Url.Home()); 
} 

내가보기에 액세스가 :하지만 ControllerBase의,

<a href="<%=Url.Home() %>" title="Hello">Hello</a> 

답변

3

UrlHelper는 ControllerBase가 아닌 Controller의 속성입니다.

보기에서 확장 메소드 클래스의 네임 스페이스를 가져 왔는지 확인하십시오. 동일한 네임 스페이스를 반복해서 가져 오는 경우 web.config에 추가 할 수 있습니다.

<pages> 
    <namespaces> 
     <add namespace="System.Web.Mvc"/> 
     <add namespace="System.Web.Mvc.Html"/> 
     <add namespace="System.Web.Routing"/> 
     <add namespace="Telerik.Web.Mvc"/> 
     <add namespace="Telerik.Web.Mvc.UI"/> 
     <add namespace="Shrinkr"/> 
     <add namespace="Shrinkr.DataTransferObjects"/> 
     <add namespace="Shrinkr.Web"/> 
    </namespaces> 
</pages> 
1

Url is a member of ViewPage합니다. 따라서 미리 생성자 인 UrlHelper를 생성자가 사용할 수있는 권한이 없습니다. 일반적으로 컨트롤러에 URL을 생성 할 필요는 없습니다.

Controller.RedirectToRoute을 사용하지 않으시겠습니까?

+0

오! 하지만 rashid의 게시물에 따르면 우리는 컨트롤러에서 액세스 할 수 있습니다! http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx#urlHelperRoute – Sadegh

관련 문제