Bagaimana cara mengarahkan ulang ke Index dari pengontrol lain?

129

Saya telah mencari melalui mencoba menemukan beberapa cara untuk mengarahkan ulang ke Indextampilan dari pengontrol lain.

public ActionResult Index()
{                
     ApplicationController viewModel = new ApplicationController();
     return RedirectToAction("Index", viewModel);
}

Ini yang saya coba sekarang. Sekarang kode yang diberikan kepada saya memiliki ActionLinktautan ke halaman yang saya perlukan Redirectjuga.

@Html.ActionLink("Bally Applications","../Application")
cjohnson2136
sumber

Jawaban:

272

Gunakan kelebihan yang mengambil nama pengontrol juga ...

return RedirectToAction("Index", "MyController");

dan

@Html.ActionLink("Link Name","Index", "MyController", null, null)
musefan
sumber
3
Ok ini berhasil. Saya mencoba ini sebelumnya pasti salah ketik ketika saya melakukannya sebelumnya.
cjohnson2136
2
apakah itu akan lebih cepat tetapi ada timer menghentikan saya
cjohnson2136
Ahh, bagi kami pemula MVC ini sangat membantu. Hanya dengan mengarahkan ke tampilan lain di folder yang berbeda yang diwakili oleh pengontrol yang berbeda, saya dapatkan sampai saya membaca ini.
atconway
cara mengarahkan ke tampilan tanpa pengontrol? sepertiShared/Error
Dylan Czenski
28

mencoba:

public ActionResult Index() {
    return RedirectToAction("actionName");
    // or
    return RedirectToAction("actionName", "controllerName");
    // or
    return RedirectToAction("actionName", "controllerName", new {/* routeValues, for example: */ id = 5 });
}

dan dalam .cshtmlpandangan:

@Html.ActionLink("linkText","actionName")

ATAU:

@Html.ActionLink("linkText","actionName","controllerName")

ATAU:

@Html.ActionLink("linkText", "actionName", "controllerName", 
    new { /* routeValues forexample: id = 6 or leave blank or use null */ }, 
    new { /* htmlAttributes forexample: @class = "my-class" or leave blank or use null */ })

Pemberitahuan menggunakan nulldalam ekspresi akhir tidak dianjurkan, dan lebih baik menggunakan kosong new {}daripadanull

Amiry ravy
sumber
3
Sehubungan dengan pemberitahuan Anda, untuk alasan apa lebih baik digunakan new {}daripada null?
musefan
16

Anda dapat menggunakan kode berikut:

return RedirectToAction("Index", "Home");

Lihat RedirectToAction

Wouter de Kort
sumber
Saya mencobanya dan tidak berhasil. Itu memberi saya halaman tidak dapat ditemukan kesalahan
cjohnson2136
harus dengan "Controller": return RedirectToAction("Index", "Home");
Hiraeth
Saya perlu menggunakan "/ Indeks" jika tidak tidak ditemukan
code4j
@ code4j bagaimana Anda menentukan rute default Anda? Sudahkah Anda menambahkan nilai default untuk controller dan action?
Wouter de Kort
2

Anda dapat menggunakan metode kelebihan beban RedirectToAction(string actionName, string controllerName);

Contoh:

RedirectToAction(nameof(HomeController.Index), "Home");
A. Lipnitskiy
sumber
1

Anda dapat menggunakan redirect lokal. Kode berikut melompati halaman Indeks HomeController's:

public class SharedController : Controller
    {
        // GET: /<controller>/
        public IActionResult _Layout(string btnLogout)
        {
            if (btnLogout != null)
            {
                return LocalRedirect("~/Index");
            }

            return View();
        }
}
Hasan Tuna Oruç
sumber
0

Jawaban lengkap (.Net Core 3.1)

Sebagian besar jawaban di sini benar tetapi diambil sedikit di luar konteks, jadi saya akan memberikan jawaban lengkap yang berfungsi untuk Asp.Net Core 3.1. Demi kelengkapan:

[Route("health")]
[ApiController]
public class HealthController : Controller
{
    [HttpGet("some_health_url")]
    public ActionResult SomeHealthMethod() {}
}

[Route("v2")]
[ApiController]
public class V2Controller : Controller
{
    [HttpGet("some_url")]
    public ActionResult SomeV2Method()
    {
        return RedirectToAction("SomeHealthMethod", "Health"); // omit "Controller"
    }
}

Jika Anda mencoba menggunakan salah satu string khusus url, mis. "some_health_url", Itu tidak akan berfungsi!

ワ イ き ん ぐ
sumber