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?


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.


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


9

Anda dapat menggunakan ini:

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

2

Gunakan ini:

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

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.