2013-03-10 2 views
0

컨트롤러를 숨기려고 할 때 링크 컨트롤러 인수를 추가, 그래서 나는 다음과 같은 경로가 다음 routehandler과 HttpHandler를 가진ActionLink 내가 그룹의 값에 따라 컨트롤러를 만들고 싶어 할

routes.MapRoute(
    name: "Default", 
    url: "{group}/{action}", 
    defaults: new { group = "Default", action = "Index" } 
).RouteHandler = new MyRouteHandler(); 

을 :

public class MyRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     return new MyHttpHandler(requestContext); 
    } 
} 

public class MyHttpHandler : IHttpHandler 
{ 
    RequestContext _requestContext; 

    public MyHttpHandler(RequestContext requestContext) 
    { 
     _requestContext = requestContext; 
    } 

    public bool IsReusable 
    { 
     get { return true; } 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     var groupName = _requestContext.RouteData.GetRequiredString("group"); 

     // Select the controller, e.g. Home: 

     _requestContext.RouteData.Values.Add("controller", "Home"); 

     IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory(); 
     IController controller = factory.CreateController(_requestContext, "Home"); 
     if (controller != null) 
     { 
      controller.Execute(_requestContext); 
     } 
    } 
} 

이 모든 작업을하지만 넣어 경우 @ Html.ActionLink ("인덱스", "인덱스")는 다음 링크를 결과 페이지 :

[A HREF = "/? 컨트롤러 = 홈 "] 색인 [/ a]

누군가가 왜 컨트롤러 인수가 Html.ActionLink를 사용할 때 추가되는지 말할 수 있습니까? (컨트롤러에 Home 인수를 추가하는 것을 원하지 않습니다.)

대단히 고마워요!

답변

0

가능한 해결 방법

routes.MapRoute(
    name: "Default", 
    url: "{group}/{action}/{controller}", 
    defaults: new { group = "Default", action = "Index", controller = "Home" } 
); 

@Html.ActionLink("Index", "Index", new {group = "Group"}); 
+0

이 내 문제에 대한 해결책이 아니다. 컨트롤러가 아직 URL에 있습니다. – Tim

+0

@Tim 맞춤형 Routehandler를 제거하고 있습니까? 위의 예제는 다음 링크를 제공합니다 : http : //.../Group, 현재 컨트롤러가 "HomeController" – Yusupov

관련 문제