2012-02-01 7 views
0

내가 잘못하고있는 것 같습니다.Url.RouteUrl을 사용할 때 영역이 누락되었습니다.

여러 가지 이유로 내 app은 사용자가 로그인 한 후 몇 가지 선택을하도록합니다. 사용자가 필요한 데이터를 입력했는지 확인하기 위해 기본 컨트롤러 클래스의 OnActionExecuting 메서드를 재정 의하여이 데이터를 입력하기 전에 작업을 실행하려고 시도한 다음 사용자를 필요한 페이지로 리디렉션합니다. 나는 그들이 다음 코드를 실행하기 위해 시도했던 작업의 URL 보존 : (. filterContext는 ActionExecutingContext 객체이며, OnActionExecuting의 매개 변수)

url = Url.RouteUrl("Default", filterContext.RouteData.Values); 

을 나는 데 문제가 있다는 것입니다 액션이 영역 내의 컨트롤러와 관련이 있다면, 내가 얻은 URL은 영역을 반영하지 않습니다.

다른 게시물에서 RouteData의 DataTokens 컬렉션에서 지역 이름을 얻을 수 있음을 이해합니다. 그러나 나는 그것을 전달하는 가장 좋은 방법이 확실치 않습니다. RouteValueDictionary.Add 메서드를 사용하여 RouteData.Values에 값을 추가 할 수 있다고 가정합니다 (값이 읽기 전용이 아닌 것으로 가정하고 잘 모르겠습니다).하지만 그 느낌은 조금 이상합니다. 여하튼 요점은 놓치고있다.

이것이 실제로 수행되는 방식입니까? 다른 곳에서 뭔가 잘못 되었나요? 그 지역은 내 RouteData.Values에 없습니다.

답변

2

필자는 필터의 데이터 토큰에서 제거하여 경로 값에 추가합니다.

if (filterContext.RouteData.DataTokens.ContainsKey("area")) 
    filterContext.RouteData.Values.Add("area", 
     filterContext.RouteData.DataTokens["area"]); 

지역은 MVC2에 추가 된 기능, 나는이 그것을 MVC1에없는의 부작용 상상 : 당신은 RouteValues.Add 함께 할 수 있습니다. 그러나 RouteValues에 "영역"키가 포함되어있는 한 UrlHelper.RouteUrl은 해당 영역에 대한 올바른 URL을 생성해야합니다.

+0

흠. 나는 "Site/Controller/Action? area = AreaName"그런 식으로 끝났다. 너무 가깝고 아직까지! –

+0

경로를 게시하십시오 (영역 등록 클래스에 context.MapRoute 호출). 기본 영역 경로를 사용하고 있습니까? – danludwig

+0

나는 몇 분 전까지 만 있었다. global.asax.cs의 기본 경로에 영역 매개 변수가 없습니다. 하나를 포함한 다른 경로를 추가했을 때, 그것은 완벽하게 작동했습니다! –

관련 문제