다른 컨트롤러의 작업으로 리디렉션


124

두 개의 컨트롤러가 있는데 둘 다 AccountController. 그 중 하나는, 그것을 호출 할 수 있습니다 Controller A에, Area전화 Admin, 호출 할 수 있고 다른 Controller B어떤 아닌, Area(나는 그것이 기본에있어 그 의미를 추측 Area?). Controller B있다 action method라고 Login. 이 줄이 있는 action methodin Controller A이 있습니다.

return RedirectToAction("LogIn", "Account");

문제는에 404존재하지 않는 것으로 리디렉션하려고 시도하기 때문에이 줄이 실행될 때 발생한다는 것 action입니다 Controller A. 나는 전화를 걸 action method의를 Controller B. 이게 가능해?


답변:


236

당신은을 제공 할 수 arearouteValues매개 변수입니다. 이 시도:

return RedirectToAction("LogIn", "Account", new { area = "Admin" });

또는

return RedirectToAction("LogIn", "Account", new { area = "" });

목표로하는 영역에 따라 다릅니다.


특정 영역의 뷰에서 어떤 영역에도없는 컨트롤러의 동작으로 이동하려면 어떻게해야합니까? MVC5와 마찬가지로 오른쪽 상단의 LogOff 버튼은 AccountController에 있으며 어떤 영역에도 상주하지 않습니다. 그리고 특정 영역의 뷰에서 로그 오프하고 싶습니까 ???
Awais Mahmood 2015 년

1
두 번째 예인 area = ""은 (는) 당신을 위해 그것을 할 것입니다.
Rory McCrossan 2015 년

이것은 ASP.NET Core에서 저에게 효과적이었습니다 .... 최신 버전으로 업그레이드했을 때 RedirectToAction이 깨졌고 빈 문자열로 area = ""를 사용하여 작동하게되었습니다.
Jonathan Alfaro

28

이것을 사용하십시오 :

return RedirectToAction("LogIn", "Account", new { area = "" });

이것은 "글로벌"영역 LogIn에있는 Account컨트롤러 의 작업으로 리디렉션됩니다 .

RedirectToAction오버로드를 사용하고 있습니다 .

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName,
    Object routeValues
)

MSDN



2

이것을 사용하십시오 :

    return this.RedirectToAction<AccountController>(m => m.LogIn());

1
컨셉이 마음에 들어요. 나는 항상 RedirectToAction의 문자열 부분을 싫어했고 그것이 당신이 입력 한 것과 더 비슷해야한다고 생각했지만 이것은 C #을 화나게하는 것처럼 보입니다. 이것은 4.6.2 이후의 프레임 워크에 있습니까?
user3071434

@ user3071434 아니요, "using Microsoft.Web.Mvc"를 추가하여 사용할 수 있습니다. 문자열 부분을 피하고 잘못된 작업 텍스트로 인해 런타임 오류가 발생하는 것을 줄일 수 있습니다.
Hiren Patel

0

전환 해보십시오.

return RedirectToAction("Account", "Login");

나는 그것을 시도하고 작동했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.