Für unsere Webanwendung muss ich die Reihenfolge der abgerufenen und angezeigten Elemente in Abhängigkeit von der Ansicht - oder genauer gesagt - dem Controller und der Aktion, die die Ansicht generiert haben (und natürlich der Benutzer-ID, aber das ist hier nicht der Punkt) speichern.
Anstatt in jeder Controller-Aktion selbst einen Bezeichner anzugeben (um ihn für eine ansichtsabhängige Sortierung von DB-Ausgaben zu verwenden), hielt ich es für sicherer und einfacher, diesen Bezeichner automatisch aus dem Controller und der Aktionsmethode zu erstellen, die er erhält angerufen von.
Wie kann ich den Namen des Controllers und der Aktion innerhalb der Aktionsmethode in einem Controller abrufen? Oder brauche ich dafür Reflexion? Ich denke, es ist ziemlich einfach, danke im Voraus!
quelle
Route
Attribut für die von mir erfasste Aktionsmethode angeben können . Ist es auch möglich, Controller umzubenennen?Antworten:
quelle
Hier sind einige Erweiterungsmethoden zum Abrufen dieser Informationen (sie enthalten auch die ID):
Verwendung:
quelle
Könnte nützlich sein. Ich brauchte die Aktion im Konstruktor des Controllers, und sie wird an diesem Punkt des MVC-Lebenszyklus angezeigt,
this
nicht initialisiert undControllerContext = null
. Anstatt in den MVC-Lebenszyklus einzutauchen und den geeigneten Funktionsnamen zum Überschreiben zu finden, habe ich die Aktion einfach in der gefundenRequestContext.RouteData
.Dazu müssen Sie jedoch, wie bei allen
HttpContext
verwandten Verwendungen im Konstruktor, den vollständigen Namespace angeben, da dieserthis.HttpContext
ebenfalls nicht initialisiert wurde. Zum Glück scheintSystem.Web.HttpContext.Current
es statisch zu sein.HINWEIS: Wahrscheinlich nicht die am meisten unterstützte Möglichkeit, auf alle Eigenschaften in HttpContext zuzugreifen, aber für RequestContext und Session scheint dies in meiner Anwendung einwandfrei zu funktionieren.
quelle
quelle
quelle
Das habe ich bisher:
quelle
Hier ist die einfachste und praktischste Antwort, um einen Namen zu erhalten:
Oder
Code über Tests mit asp.net mvc 5.
quelle
Fügen Sie dies Ihrem Basis-Controller innerhalb der GetDefaults () -Methode hinzu
Implementieren Sie Ihre Controller in Basecontroller
Fügen Sie eine Teilansicht _Breadcrumb.cshtml hinzu und fügen Sie sie auf allen erforderlichen Seiten mit @ Html.Partial ("_ Breadcrumb") hinzu.
_Breadcrumb.cshtml
quelle
filterContext
Variable von innenGetDefaults()
?Sie können den Controller-Namen oder den Aktionsnamen wie jede Variable aus der Aktion abrufen. Sie sind nur speziell (Controller und Aktion) und bereits definiert, sodass Sie nichts Besonderes tun müssen, um sie zu erhalten, außer zu sagen, dass Sie sie benötigen.
Oder Sie können Controller und Aktionen in Ihre Modelle aufnehmen, um zwei davon und Ihre benutzerdefinierten Daten abzurufen.
quelle
Dies scheint für mich (bisher) gut zu funktionieren, funktioniert auch, wenn Sie Attribut-Routing verwenden.
quelle
Um die Notwendigkeit eines
ToString()
Anrufs zu beseitigen , verwenden Siequelle
Zeichenfolge actionName = this.ControllerContext.RouteData.Values ["action"]. ToString ();
Zeichenfolge controllerName = this.ControllerContext.RouteData.Values ["controller"]. ToString ();
quelle
Warum nicht etwas Einfacheres haben?
Rufen
Request.Path
Sie einfach auf , es wird eine durch "/" getrennte Zeichenfolge zurückgegeben.und dann können Sie verwenden
.Split('/')[1]
, um den Controller-Namen zu erhalten.quelle
http://www.example.com/sites/site1/controllerA/actionB/
. MVC bietet eine Reihe von APIs für das Routing. Warum müssen Sie also (erneut) URLs analysieren?.controller/action