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")
cjohnson2136
quelle

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)
Musefan
quelle
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

ravy amiry
quelle
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

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

ワ イ き ん ぐ
quelle