Zobacz aktualny kontroler


127

Mam, View - _Editktóry mieszka w News M/V/C.

Używam ponownie V/Mprzez CategoryControllerjako:

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

Jak z poziomu okna View - _Editmogę ostrzec nazwę kontrolera?

Kiedy ja:

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

Wartość to: News Jednak adres URL to:/Category/foobar

Czy istnieje sposób, aby uzyskać wartość 'Category'ostrzeżenia? dzięki


nie masz NewsController?
hunter

Proszę pisać swoje działanie method, które jest ładowanie partialviewi co controller, że methodistnieje w.
Hunter

Odpowiedzi:


193

Przedstawiłem to w mojej częściowej opinii:

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

w takiej samej sytuacji, którą opisujesz, i pokazuje kontroler opisany w adresie URL (Kategoria dla Ciebie, Produkt dla mnie), zamiast rzeczywistej lokalizacji częściowego widoku.

Zamiast tego użyj tego alertu:

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

25
Odpowiedź Palpie poniżej jest (łatwiejszym do zapamiętania) skrótem:@ViewContext.RouteData.Values["controller"]
Laoujin.

6
Tylko fyi, nie musisz HttpContext.Current. Requestjest dostępny bezpośrednio.
Serj Sagan,

Czy można uzyskać pełną nazwę klasy kontrolera, w tym przestrzeń nazw? Fajnie byłoby też móc wyświetlać nazwę widoku.
Johncl

3
btw, ["action"]działa, jeśli chcesz nazwę metody akcji.
Zapnologica

117

Robię to w ten sposób, ale może to tylko ASP.NET MVC 4

@ViewContext.RouteData.Values["controller"]

12
Pamiętaj, że Twoje rozwiązanie zwróci kontroler, który jest aktualnie wykonywany. W związku z tym, jeśli przeglądarka wysyła żądanie dla kontrolera A, a kontroler A renderuje częściowy widok z kontroleraB, Twoje rozwiązanie zwróci nazwę kontroleraB, podczas gdy rozwiązanie Nicholas Sizer zwróci nazwę kontrolera A.
Thomas CG de Vilhena

Powinien zostać przyjęty jako najlepsza odpowiedź. To nadal działa w ASP.NET Core 2.2
Tom

21

Utwórz klasę bazową dla wszystkich kontrolerów i umieść tutaj atrybut nazwy:

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

Z uwagi

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

Przykład kontrolera

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

Proszę wyjaśnić, jak Nameustawia się właściwość?
ErikE

13

Inny sposób uzyskania aktualnej nazwy kontrolera w widoku

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

5

Po prostu użyj:

ViewContext.Controller.GetType().Name

W ten sposób otrzymasz pełną nazwę kontrolera


2

Nadal jesteś w kontekście swojego, CategoryControllermimo że ładujesz plik PartialViewz Views/Newsfolderu.


0

Możesz użyć dowolnego z poniższych kodów, aby uzyskać nazwę kontrolera

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

Jeśli używasz MVC 3, możesz użyć

@ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.