Chuyển hướng đến Hành động trong một bộ điều khiển khác


124

Tôi có hai bộ điều khiển, cả hai đều được gọi AccountController. Một trong số chúng, cho phép gọi nó Controller A, trong một cuộc Areagọi Adminvà cái kia, cho phép gọi nó Controller B, không trong bất kỳ Area(tôi đoán điều đó có nghĩa là nó ở mặc định Area?). Controller Bcó một action methodđược gọi Login. Tôi có một action methodtrong Controller A, có dòng này

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

Vấn đề là tôi nhận được một 404khi dòng này được thực thi vì một nỗ lực được thực hiện để chuyển hướng đến một không tồn tại actiontrong Controller A. Tôi muốn gọi action methodvào Controller B. Điều này có khả thi không?


Câu trả lời:


236

Bạn có thể cung cấp areatrong routeValuestham số. Thử cái này:

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

Hoặc là

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

tùy thuộc vào lĩnh vực bạn đang hướng tới.


điều gì sẽ xảy ra nếu tôi muốn chuyển từ chế độ xem trong một khu vực nhất định sang hành động của bộ điều khiển không nằm trong khu vực nào. Giống như trong MVC5, nút LogOff ở trên cùng bên phải nằm trong AccountController, không nằm ở bất kỳ khu vực nào. Và tôi muốn Đăng xuất khỏi một chế độ xem trong một khu vực nhất định ???
Awais Mahmood

1
Ví dụ thứ hai của tôi area = "", sẽ làm điều đó cho bạn.
Rory McCrossan

Điều này đã làm việc với tôi với ASP.NET Core .... Khi tôi nâng cấp lên phiên bản mới nhất, RedirectToAction đã bị lỗi và tôi làm cho nó hoạt động bằng cách sử dụng area = "" với một chuỗi trống.
Jonathan Alfaro

28

Dùng cái này:

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

Điều này sẽ chuyển hướng đến LogInhành động trongAccount bộ điều khiển trong khu vực "toàn cầu".

Nó đang sử dụng RedirectToActionquá tải này :

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

MSDN


9

Bạn có thể sử dụng cái này:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });

2

Dùng cái này:

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

1
Tôi thích khái niệm này. Tôi luôn ghét phần chuỗi của RedirectToAction và nghĩ rằng nó phải giống với những gì bạn đã nhập hơn, nhưng điều này có vẻ khiến c # tức giận. Điều này có trong các khung công tác mới hơn 4.6.2 không?
user3071434

@ user3071434 Không, bạn có thể sử dụng bằng cách thêm "using Microsoft.Web.Mvc". bạn có thể tránh chuỗi phần và giảm để nhận được một lỗi trên runtime do các văn bản hành động sai
Hiren Patel

0

Hãy thử chuyển đổi chúng:

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

Tôi đã thử và nó đã hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.