2011-06-14 2 views
0

두 개의 공용 작업 메서드 인 Index() 및 Unsubscribe()가있는 'SubscriptionsController'라는 영역에 '구독자'라는 영역과 컨트롤러가 있습니다. Unsubscribe() 메서드가 전달되는 구독자 ID ie Unsubscribe (int id)라우팅 후 영역을 무시하는 RedirectToAction

Unsubscribe() 메서드는 같은 컨트롤러에서 다른 작업에 대한 RedirectToAction ("Index")을 수행합니다. 나는 '/ 가입자/가입/탈퇴/999'을 통해 페이지에 액세스하는 경우

public ActionResult Index() 
{ 
    return View(); 
} 

RedirectToActionMethod()가 올바르게 지수() 액션에 저를 리디렉션.

routes.MapRoute(
    "Unsubscribe", 
    "Unsubscribe/{id}", 
    new {area = "Subscribers", controller = "Subscriptions", action = "Unsubscribe"} 
); 

는이 경로가 나타납니다

내가 정식 URL '바로 가기'에 수 있기를 원 ('/ 구독자/구독/탈퇴/999') 그래서 Global.ascx 파일에 대한 경로를 추가 예상대로 Unsubscribe() 메서드를 실행하면 제대로 작동합니다. 문제는 Unsubscribe() 내의 RedirectToAction ("Index")에 대한 호출이 여전히 올바른 동작 (Index())을 호출하는 동안 실패하므로 뷰 엔진이 이제 영역을 무시하고 관련 뷰를로드하려고합니다. ~/Areas/Subscribers/Views/Subscriptions/Index.aspx '대신'~/Views/Subscriptions/Index.aspx '웹 사이트의 루트

RedirectToAction() 메서드를 수정하여이 문제를 해결할 수 있습니다. 따라서 탈퇴() 메소드 :

return RedirectToAction("Index", "Subscriptions", new { Area = "Subscribers" }); 

하지만이 문제에 대한 성가신 아니라 매우 유연한 솔루션처럼 보인다.

모든 조언이나 설명을 주시면 감사하겠습니다.

감사합니다.

답변

0

문제가 해결 된 것 같습니다.

라우팅은 지역의 RegisterArea 방법에 갈 필요 :

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Subscribers_unsubscribe", 
     "Unsubscribe/{id}", 
     new { controller = "Subscriptions", action = "Unsubscribe", id = UrlParameter.Optional } 
    ); 

    context.MapRoute(
     "Subscribers_default", 
     "Subscribers/{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 
관련 문제