Holen Sie sich den aktuellen Controller im Blick


127

Ich habe eine, in View - _Editder lebt News M/V/C.

Ich verwende das V/Mvia the CategoryControlleras wieder:

return PartialView("/Views/News/_Edit.cshtml", model);

Wie View - _Editkann ich den Controller-Namen aus dem heraus benachrichtigen?

Wenn ich:

alert('@ViewContext. RouteData.Values["controller"].ToString()');

Der Wert lautet: News Die URL lautet jedoch:/Category/foobar

Gibt es eine Möglichkeit, den Wert 'Category'zu alarmieren? Vielen Dank


du hast keine NewsController?
Jäger

Bitte posten Sie Ihre Aktion method, die das lädt partialviewund was controllerdarin methodvorhanden ist.
Jäger

Antworten:


193

Ich habe dies in meine Teilansicht aufgenommen:

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()

In der gleichen Situation, die Sie beschreiben, wird der in der URL beschriebene Controller (Kategorie für Sie, Produkt für mich) anstelle des tatsächlichen Speicherorts der Teilansicht angezeigt.

Verwenden Sie stattdessen diese Warnung:

alert('@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString()');

25
Die Antwort unten von Palpie ist eine (leichter zu merkende) Abkürzung:@ViewContext.RouteData.Values["controller"]
Laoujin

6
Nur zu Ihrer Information, Sie müssen nicht bekommen HttpContext.Current. Requestist direkt verfügbar.
Serj Sagan

Ist es möglich, den vollständigen Namen der Controller-Klasse einschließlich des Namespace abzurufen? Es wäre auch cool, auch den Namen der Ansicht anzeigen zu können.
Johncl

3
Übrigens, ["action"]funktioniert, wenn Sie den Namen der Aktionsmethode möchten.
Zapnologica

117

Ich mache es so, aber vielleicht ist es nur ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

12
Beachten Sie, dass Ihre Lösung den Controller zurückgibt, der gerade ausgeführt wird. Wenn also ein Browser eine Anforderung für ControllerA stellt und ControllerA eine Teilansicht von ControllerB rendert, gibt Ihre Lösung den Namen von ControllerB zurück, während die Nicholas Sizer-Lösung den Namen von ControllerA zurückgibt.
Thomas CG de Vilhena

Sollte als beste Antwort akzeptiert werden. Dies funktioniert immer noch in ASP.NET Core 2.2
Tom

21

Erstellen Sie eine Basisklasse für alle Controller und geben Sie hier das Namensattribut ein:

public abstract class MyBaseController : Controller
{
    public abstract string Name { get; }
}

Im Hinblick auf

@{
    var controller = ViewContext.Controller as MyBaseController;
    if (controller != null)
    {
       @controller.Name
    }
}

Controller-Beispiel

 public class SampleController: MyBaseController 
    { 
      public override string Name { get { return "Sample"; } 
    }

Bitte erläutern Sie, wie die NameImmobilie eingestellt wird.
ErikE

13

Andere Möglichkeit, den aktuellen Controller-Namen in View abzurufen

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue

5

Benutz einfach:

ViewContext.Controller.GetType().Name

Dadurch erhalten Sie den gesamten Namen des Controllers


2

Sie befinden sich immer noch im Kontext Ihres Ordners, CategoryControllerobwohl Sie einen PartialViewaus Ihrem Views/NewsOrdner laden .


0

Sie können einen der folgenden Codes verwenden, um den Controller-Namen abzurufen

@HttpContext.Current.Request.RequestContext.RouteData.Values["controller"].ToString();

Wenn Sie MVC 3 verwenden, können Sie verwenden

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.