Ich habe eine Aktion, die ich so von einem Anker aus rufe, Site/Controller/Action/ID
wo ID
ist eine int
.
Später muss ich von einem Controller zu derselben Aktion umleiten.
Gibt es eine clevere Möglichkeit, dies zu tun? Momentan verstecke ich Tempdata ID
, aber wenn Sie f5 drücken, um die Seite nach dem Zurückgehen erneut zu aktualisieren, sind die Tempdata verschwunden und die Seite stürzt ab.
c#
asp.net-mvc
controller
redirecttoaction
Eric Brown - Cal
quelle
quelle
Return RedirectToAction("Action", "Controller", New With {.id = 99})
Kurts Antwort sollte aus meiner Forschung heraus richtig sein, aber als ich es versuchte, musste ich dies tun, damit es tatsächlich für mich funktioniert:
Wenn ich den Controller und die Aktion im nicht angegeben habe, hat
RouteValueDictionary
es nicht funktioniert.Auch wenn so codiert, scheint der erste Parameter (Aktion) ignoriert zu werden. Wenn Sie also nur den Controller im Dict angeben und erwarten, dass der erste Parameter die Aktion angibt, funktioniert dies ebenfalls nicht.
Wenn Sie später vorbeikommen, versuchen Sie zuerst Kurts Antwort, und wenn Sie immer noch Probleme haben, versuchen Sie diese.
quelle
controller
Parameter optional ist, wenn sich die Umleitungsaktion auf demselben Controller befindet wie die Aktion, von der Sie umleiten.RedirectToAction
mit Parameter:quelle
new {id = id}
funktioniert genauso gut, da das Framework weiß, auf welche Variable Sie sich beziehen.Es ist auch erwähnenswert, dass Sie mehr als einen Parameter durchlaufen können. Die ID wird verwendet, um einen Teil der URL zu bilden, und alle anderen werden nach einem? als Parameter übergeben. in der URL und wird standardmäßig UrlEncoded sein.
z.B
Die URL wäre also:
Diese können dann von Ihrem Controller referenziert werden:
quelle
Beispiel
quelle
MVC 4 Beispiel ...
Beachten Sie, dass Sie nicht immer den Parameter ID übergeben müssen
Und,
Natürlich können Sie Modellfeldern Zeichenfolgen zuweisen, anstatt ViewBag zu verwenden, wenn Sie dies bevorzugen.
quelle
Wenn Ihr Parameter ein komplexes Objekt ist, wird das Problem dadurch gelöst . Der Schlüssel ist der
RouteValueDictionary
Konstruktor.Wenn Sie zufällig Sammlungen haben, ist dies etwas schwieriger, aber diese andere Antwort deckt dies sehr gut ab .
quelle
Arbeitete für mich, musste nicht tun
new{id = id}
Ich habe innerhalb desselben Controllers umgeleitet, daher brauchte ich das nicht
"Controller"
, bin mir aber nicht sicher, welche Logik dahinter steckt, wenn der Controller als Parameter benötigt wird.quelle
RedirectToAction("Action", "Controller", new { id = id});
war genau das, was ich in meiner Core 3.1 App brauchte.Wenn jemand eine Fehlermeldung anzeigen möchte,
[httppost]
kann er es versuchen, indem er eine ID mit übergibtfür Details wie diese
Hoffe es funktioniert gut.
quelle
....
....
quelle
Ich hatte auch dieses Problem, und eine gute Möglichkeit, dies zu tun, wenn Sie sich innerhalb desselben Controllers befinden, ist die Verwendung benannter Parameter:
quelle
Dies kann Jahre her sein, hängt jedoch auch von Ihrer Global.asax-Kartenroute ab, da Sie Parameter hinzufügen oder bearbeiten können, die Ihren Wünschen entsprechen.
z.B.
Global.asax
Dann ändern sich die Parameter, die Sie übergeben müssen, zu:
quelle
Wenn Sie zu einer Aktion außerhalb des Controllers umleiten müssen, funktioniert dies.
quelle
Das Folgende gelang mit asp.net Core 2.1. Es kann anderswo gelten. Das Wörterbuch ControllerBase.ControllerContext.RouteData.Values ist direkt über die Aktionsmethode zugänglich und beschreibbar. Möglicherweise ist dies das endgültige Ziel der Daten in den anderen Lösungen. Außerdem wird angezeigt, woher die Standardroutingdaten stammen.
quelle