Wie leite ich von einem anderen Controller zum Index um?


129

Ich habe versucht, einen Weg zu finden, um zu einer IndexAnsicht von einem anderen Controller umzuleiten .

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

Das habe ich gerade versucht. Jetzt hat der Code, den ich erhalten habe, einen ActionLinkLink zu der Seite, die ich auch brauche Redirect.

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

Antworten:


272

Verwenden Sie die Überladungen, die auch den Controller-Namen annehmen ...

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

und

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

3
Ok das hat funktioniert. Ich habe es früher versucht, muss ein Tippfehler gewesen sein, als ich es vorher getan habe.
cjohnson2136

2
tat das würde früher, aber es gab einen Timer, der mich
aufhielt

Ahh, für uns MVC-Neulinge war das äußerst hilfreich. Das einfache Umleiten zu einer anderen Ansicht in einem anderen Ordner, der von einem anderen Controller dargestellt wird, wurde von mir übernommen, bis ich dies las.
Atconway

Wie leite ich zu einer Ansicht ohne Controller um? wieShared/Error
Dylan Czenski

28

Versuchen:

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

und im .cshtmlBlick:

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

ODER:

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

ODER:

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

Beachten Sie, dass die Verwendung nullim endgültigen Ausdruck nicht empfohlen wird und es besser ist, new {}stattdessen ein Leerzeichen zu verwendennull


3
Aus welchem ​​Grund ist es in Bezug auf Ihre Mitteilung besser, new {}statt zu verwenden null?
Musefan

16

Sie können den folgenden Code verwenden:

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

Siehe RedirectToAction


Ich habe das versucht und es hat nicht funktioniert. Es gab mir Seite konnte nicht gefunden werden Fehler
cjohnson2136

sollte mit "Controller" sein: return RedirectToAction("Index", "Home");
Hiraeth

Ich muss "/ Index" verwenden, sonst nicht gefunden
code4j

@ code4j Wie haben Sie Ihre Standardrouten definiert? Haben Sie Standardwerte für Controller und Aktion hinzugefügt?
Wouter de Kort

2

Sie können die Überladungsmethode verwenden RedirectToAction(string actionName, string controllerName);

Beispiel:

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

1

Sie können die lokale Umleitung verwenden. Folgende Codes springen auf der Indexseite des HomeControllers:

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

            return View();
        }
}

0

Vollständige Antwort (.Net Core 3.1)

Die meisten Antworten hier sind korrekt, aber etwas aus dem Zusammenhang gerissen. Daher werde ich eine vollständige Antwort geben, die für Asp.Net Core 3.1 funktioniert. Der Vollständigkeit halber:

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

Wenn Sie versuchen, eine der URL-spezifischen Zeichenfolgen zu verwenden, z. B. "some_health_url"funktioniert dies nicht!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.