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

Valamas
źródło
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()');
Nicholas Sizer
źródło
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"]
Peter Hedberg
źródło
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"; } 
    }
Sel
źródło
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
Vladimir Savinov
źródło
5

Po prostu użyj:

ViewContext.Controller.GetType().Name

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

batspy
źródło
2

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

myśliwy
źródło
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
Sathish
źródło