Comment rediriger vers Index depuis un autre contrôleur?


129

J'ai cherché à trouver un moyen de rediriger vers une Indexvue d'un autre contrôleur.

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

C'est ce que j'ai essayé en ce moment. Maintenant, le code qui m'a été donné a un ActionLinklien vers la page dont j'ai besoin Redirect.

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

Réponses:


272

Utilisez également les surcharges qui prennent le nom du contrôleur ...

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

et

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

3
Ok cela a fonctionné. J'ai essayé cela plus tôt doit être une faute de frappe quand je l'ai fait avant.
cjohnson2136

2
fait cela plus tôt, mais il y avait une minuterie qui
m'arrêtait

Ahh, pour nous, débutants MVC, cela a été extrêmement utile. Le simple fait de rediriger vers une autre vue dans un dossier différent représenté par un contrôleur différent m'obtenait jusqu'à ce que je lise ceci.
atconway

comment rediriger vers une vue sans contrôleur? tels queShared/Error
Dylan Czenski

28

essayer:

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

et en .cshtmlvue:

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

OU:

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

OU:

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

Remarquez que l' utilisation nulldans l'expression finale n'est pas recommandée, et il est préférable d'utiliser un blanc new {}au lieu denull


3
En ce qui concerne votre avis, pour quelle raison est-il préférable d'utiliser new {}au lieu de null?
musefan

16

Vous pouvez utiliser le code suivant:

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

Voir RedirectToAction


J'ai essayé cela et cela n'a pas fonctionné. Il m'a donné une page introuvable erreur
cjohnson2136

devrait être avec "Controller": return RedirectToAction("Index", "Home");
Hiraeth

Je dois utiliser "/ Index" sinon introuvable
code4j

@ code4j comment avez-vous défini vos itinéraires par défaut? Avez-vous ajouté des valeurs par défaut pour le contrôleur et l'action?
Wouter de Kort

2

Vous pouvez utiliser la méthode des surcharges RedirectToAction(string actionName, string controllerName);

Exemple:

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

1

Vous pouvez utiliser la redirection locale. Les codes suivants sautent la page d'index du HomeController:

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

            return View();
        }
}

0

Réponse complète (.Net Core 3.1)

La plupart des réponses ici sont correctes mais prises un peu hors de leur contexte, je vais donc fournir une réponse complète qui fonctionne pour Asp.Net Core 3.1. Par souci d'exhaustivité:

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

Si vous essayez d'utiliser l'une des chaînes spécifiques à l'URL, par exemple "some_health_url", cela ne fonctionnera pas!

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.