Come reindirizzare all'indice da un altro controller?


129

Ho cercato attraverso il tentativo di trovare un modo per reindirizzare a una Indexvista da un altro controller.

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

Questo è quello che ho provato in questo momento. Ora il codice che mi è stato dato ha un ActionLinklink alla pagina di cui ho bisogno Redirectanche io .

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

Risposte:


272

Usa i sovraccarichi che prendono anche il nome del controller ...

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

e

@Html.ActionLink("Link Name","Index", "MyController", null, null)

3
Ok questo ha funzionato. Ho provato prima questo deve essere stato un refuso quando l'ho fatto prima.
cjohnson2136,

2
lo avrebbe fatto prima ma c'era un timer che mi fermava
cjohnson2136

Ahh, per noi neofiti di MVC questo è stato estremamente utile. Il semplice reindirizzamento a un'altra vista in una cartella diversa rappresentata da un controller diverso mi stava ottenendo fino a quando non ho letto questo.
atconway

come reindirizzare a una vista senza un controller? comeShared/Error
Dylan Czenski,

28

provare:

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

e in .cshtmlvista:

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

O:

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

O:

@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 */ })

Sinull consiglia di non utilizzare l'espressione finale ed è preferibile utilizzare uno spazio vuoto new {}anzichénull


3
Per quanto riguarda il tuo avviso, per quale motivo è meglio usare new {}invece di null?
musefan,

16

Puoi usare il seguente codice:

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

Vedi RedirectToAction


L'ho provato e non ha funzionato. Non mi è stato possibile trovare la pagina errore
cjohnson2136

dovrebbe essere con "Controller": return RedirectToAction("Index", "Home");
Hiraeth

Devo usare "/ Index" altrimenti non trovato
code4j

@ code4j come hai definito i tuoi percorsi predefiniti? Hai aggiunto valori predefiniti per controller e azione?
Wouter de Kort,

2

È possibile utilizzare il metodo dei sovraccarichi RedirectToAction(string actionName, string controllerName);

Esempio:

RedirectToAction(nameof(HomeController.Index), "Home");

1

È possibile utilizzare il reindirizzamento locale. I seguenti codici saltano la pagina dell'indice di HomeController:

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

            return View();
        }
}

0

Risposta completa (.Net Core 3.1)

La maggior parte delle risposte qui sono corrette ma prese un po 'fuori dal contesto, quindi fornirò una risposta a tutti gli effetti che funziona con Asp.Net Core 3.1. Per completezza:

[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"
    }
}

Se si tenta di utilizzare una delle stringhe specifiche dell'URL, ad esempio "some_health_url", non funzionerà!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.