Wie erhält man den aktuellen Bereichsnamen in der Ansicht oder im Controller?
Gibt es so etwas ViewContext.RouteData.Values["controller"]
für Gebiete?
c#
asp.net-mvc
razor
user202448
quelle
quelle
ASP.NET Core 1.0
stattMVC6
.. :-)quelle
Sie können es vom Controller erhalten, indem Sie:
quelle
In ASP.NET Core 1.0 befindet sich der Wert in
ViewContext.RouteData.Values ["area"];
quelle
pageModel.RouteData.Values.TryGetValue("area", out object area)
sollte stattdessen verwendet werden)Ich habe gerade einen Protokolleintrag darüber geschrieben . Sie können ihn für weitere Details besuchen, aber meine Antwort war, eine Erweiterungsmethode zu erstellen (siehe unten).
Der entscheidende Kicker war, dass Sie den MVC-Bereich aus den .DataTokens und den Controller / die Aktion aus den .Values der RouteData ziehen.
Dann können Sie es wie folgt implementieren:
quelle
area
Token nicht in der findenValues
, musste aber in derDataTokens
... keine Ahnung warum.Ich habe eine Erweiterungsmethode erstellt
RouteData
, die den aktuellen Bereichsnamen zurückgibt.Da
RouteData
ist auf beiden verfügbarControllerContext
undViewContext
es kann in Ihrem Controller und Ansichten zugegriffen werden.Es ist auch sehr einfach zu testen:
Es muss nicht überprüft werden, ob
RouteData.DataTokens
null ist, da dies immer intern initialisiert wird.quelle
MVC Futures verfügt über eine AreaHelpers.GetAreaName () -Methode. Seien Sie jedoch vorsichtig, wenn Sie diese Methode verwenden. Die Verwendung des aktuellen Bereichs, um Laufzeitentscheidungen über Ihre Anwendung zu treffen, kann zu schwer zu debuggendem oder unsicherem Code führen.
quelle
this.GetName()
und für die aktuelle Methode verwendenMethodBase.GetCurrentMethod().Name
Ich weiß, dass dies alt ist, aber auch in einem Filter wie ActionFilter liefert Ihnen der Kontext nicht einfach die Bereichsinformationen.
Es kann im folgenden Code gefunden werden:
Der filterContext wird also beim Überschreiben übergeben und die richtigen RouteData werden unter dem RequestContext gefunden. Es gibt RoutData auf der Basisebene, aber die DataTokens haben NICHT den Bereich in ihrem Wörterbuch.
quelle
So rufen Sie den Bereichsnamen in der Ansicht in ASP.NET Core MVC 2.1 ab:
quelle
Abrufen des Bereichsnamens in View (.NET Core 2.2):
quelle
Ich weiß, dass dies ein sehr sehr alter Beitrag ist, aber wir können die Values-Eigenschaft genauso verwenden wie die DataTokens
Url.RequestContext.RouteData.Values ["Aktion"] hat bei mir funktioniert.
quelle
Ich weiß nicht warum, aber akzeptierte Antwort funktioniert nicht. Es gibt null zurück mit zB (vielleicht über mvc, ich benutze .net Core)
Ich debugge immer die Variable und rufe Daten darin ab.
Versuche dies. Für mich geht das
Detailliertes logisches Beispiel
quelle