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")
cjohnson2136
la source

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)
musefan
la source
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

ravy amiry
la source
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

Wouter de Kort
la source
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");
A. Lipnitskiy
la source
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();
        }
}
Hasan Thon Oruç
la source
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!

ワ イ き ん ぐ
la source