Redirect to Action di pengontrol lain

124

Saya memiliki dua pengontrol, keduanya disebut AccountController. Salah satunya, sebut saja Controller A, ada di Areapanggil Admindan yang lainnya, sebut saja Controller B, tidak ada Area(saya kira itu berarti dalam default Area?). Controller Btelah sebuah action methoddisebut Login. Saya memiliki action methodin Controller A, yang memiliki baris ini

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

Masalahnya adalah bahwa saya mendapatkan 404ketika baris ini dijalankan karena upaya dilakukan untuk mengalihkan ke yang tidak ada actiondi Controller A. Saya ingin memanggil action methoddi Controller B. Apakah ini mungkin?

Sachin Kainth
sumber
2
kemungkinan duplikat Pengalihan MVC ke Indeks dari Pengontrol lain
musefan

Jawaban:

236

Anda dapat areamemasukkan routeValuesparameter in. Coba ini:

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

Atau

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

tergantung area mana yang Anda tuju.

Rory McCrossan
sumber
bagaimana jika saya ingin beralih dari tampilan di area tertentu ke tindakan pengontrol yang tidak ada di area mana pun. Seperti di MVC5, tombol LogOff di kanan atas ada di AccountController, yang tidak berada di area mana pun. Dan saya ingin LogOff dari tampilan di area tertentu ???
Awais Mahmood
1
Contoh kedua saya area = "",, akan melakukannya untuk Anda.
Rory McCrossan
Ini bekerja untuk saya dengan ASP.NET Core .... Ketika saya mengupgrade ke versi terbaru RedirectToAction rusak dan saya membuatnya bekerja menggunakan area = "" dengan string kosong.
Jonathan Alfaro
28

Gunakan ini:

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

Ini akan mengarahkan ke LogIntindakan di Accountpengontrol di area "global".

Ini menggunakan RedirectToActionkelebihan ini :

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

MSDN

gdoron mendukung Monica
sumber
9

Anda dapat menggunakan ini:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });
Muhammad Awais
sumber
2

Gunakan ini:

    return this.RedirectToAction<AccountController>(m => m.LogIn());
Hiren Patel
sumber
1
Saya suka konsepnya. Saya selalu membenci bagian string dari RedirectToAction dan berpikir itu harus lebih seperti apa yang Anda masukkan, tetapi ini tampaknya membuat marah c #. Apakah ini dalam kerangka kerja yang lebih baru dari 4.6.2?
pengguna3071434
@ user3071434 Tidak, Anda dapat menggunakan dengan menambahkan "menggunakan Microsoft.Web.Mvc". Anda dapat menghindari bagian string dan mengurangi untuk mendapatkan kesalahan saat runtime karena teks Tindakan yang salah
Hiren Patel
0

Coba gantilah:

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

Saya mencobanya dan berhasil.

Raymond Irani
sumber