Ich wollte auf meiner Masterseite eine CSS-Klasse festlegen, die vom aktuellen Controller und der aktuellen Aktion abhängt. Ich kann über den aktuellen Controller erhalten ViewContext.Controller.GetType().Name
, aber wie bekomme ich die aktuelle Aktion (zB Index
, Show
etc.)?
c#
asp.net-mvc
Buggs
quelle
quelle
Im RC können Sie auch Routendaten wie den Namen der Aktionsmethode wie folgt extrahieren
Update für MVC 3
Update für MVC 4
Update für MVC 4.5
quelle
ViewContext.Controller.ValueProvider.GetValue("action").RawValue
+ VariationenSo erhalten Sie die aktuelle ID in einer Ansicht:
So erhalten Sie den aktuellen Controller:
quelle
ViewContext.RouteData.Values.ContainsKey(<key>)
zuerst mit.Ich weiß, dass dies eine ältere Frage ist, aber ich habe sie gesehen und dachte, Sie könnten an einer alternativen Version interessiert sein, als Ihre Ansicht die Daten abrufen zu lassen, die sie für ihre Arbeit benötigt.
Meiner Meinung nach wäre es einfacher, die OnActionExecuting- Methode zu überschreiben . Sie erhalten den ActionExecutingContext , der das ActionDescriptor- Mitglied enthält, mit dem Sie die gesuchten Informationen abrufen können. Dies ist der ActionName. Sie können auch den ControllerDescriptor erreichen und er enthält den ControllerName.
Hoffe das hilft. Wenn überhaupt, wird es zumindest eine Alternative für alle anderen zeigen, die von Ihrer Frage kommen.
quelle
Ich sah verschiedene Antworten und fand einen Klassenhelfer:
In View (oder Master / Layout) können Sie es also wie folgt verwenden (Razor-Syntax):
Ich hoffe es hilft.
quelle
Sie können diese Daten aus RouteData eines ViewContext abrufen
quelle
In MVC sollten Sie der Ansicht alle Daten zur Verfügung stellen und nicht zulassen, dass die Ansicht ihre eigenen Daten sammelt. Sie können also die CSS-Klasse in Ihrer Controller-Aktion festlegen.
und wählen Sie diesen Wert aus Ihren ViewData in Ihrer Ansicht aus
quelle
Ich stimme für diese 2:
und
Sie können sowohl den physischen Namen der aktuellen Ansicht als auch die Aktion abrufen, die sie ausgelöst hat. Es kann in partiellen * .acmx-Seiten nützlich sein, den Host-Container zu bestimmen.
quelle
Ich verwende ASP.NET MVC 4 und das hat bei mir funktioniert:
quelle
Erweiterung der Antwort von Dale Ragan , sein Beispiel für die Wiederverwendung, erweitern, erstellen Sie eine ApplicationController-Klasse, die von Controller abgeleitet ist, und lassen Sie alle Ihre anderen Controller von dieser ApplicationController-Klasse und nicht von Controller ableiten.
Beispiel:
Erstellen Sie auf Ihrem neuen ApplicationController eine Eigenschaft namens ExecutingAction mit dieser Signatur:
Weisen Sie dann in der OnActionExecuting-Methode (aus der Antwort von Dale Ragan) dieser Eigenschaft einfach den ActionDescriptor zu, und Sie können jederzeit darauf zugreifen, wenn Sie ihn in einem Ihrer Controller benötigen.
quelle
Überschreiben Sie diese Funktion in Ihrem Controller
quelle