Jak uzyskać bieżącą nazwę obszaru w widoku lub kontrolerze?
Czy jest coś podobnego ViewContext.RouteData.Values["controller"]
do obszarów?
c#
asp.net-mvc
razor
user202448
źródło
źródło
ASP.NET Core 1.0
zamiastMVC6
.. :-)źródło
Możesz go pobrać z kontrolera za pomocą:
źródło
W ASP.NET Core 1.0 wartość znajduje się w
ViewContext.RouteData.Values ["obszar"];
źródło
pageModel.RouteData.Values.TryGetValue("area", out object area)
należy go zamiast tego użyć)Właśnie napisałem wpis w dzienniku ab na ten temat , możesz go odwiedzić, aby uzyskać więcej informacji, ale moją odpowiedzią było utworzenie metody rozszerzenia, pokazanej poniżej.
Kluczowym kicker było to, że wyciągasz obszar MVC z .DataTokens, a kontroler / akcja z .Values of the RouteData.
Następnie możesz to zaimplementować jak poniżej:
źródło
area
tokena w,Values
ale musiałem zajrzeć doDataTokens
... nie mam pojęcia dlaczego.Stworzyłem metodę rozszerzenia,
RouteData
która zwraca bieżącą nazwę obszaru.Ponieważ
RouteData
jest dostępny na obuControllerContext
iViewContext
można uzyskać do niego dostęp w kontrolerze i widokach.Bardzo łatwo jest też przetestować:
Nie ma potrzeby sprawdzania, czy
RouteData.DataTokens
jest null, ponieważ jest to zawsze inicjowane wewnętrznie.źródło
MVC Futures ma metodę AreaHelpers.GetAreaName (). Jednak zachowaj ostrożność, jeśli używasz tej metody. Używanie bieżącego obszaru do podejmowania decyzji dotyczących aplikacji w czasie wykonywania może prowadzić do trudnego do debugowania lub niezabezpieczonego kodu.
źródło
this.GetName()
i do bieżącego użycia metodyMethodBase.GetCurrentMethod().Name
Wiem, że to jest stare, ale także w filtrze takim jak ActionFilter kontekst nie zapewnia łatwo informacji o obszarze.
Można go znaleźć w następującym kodzie:
Tak więc filterContext jest przekazywana w przypadku zastąpienia, a poprawne RouteData znajduje się w RequestContext. Istnieje RoutData na poziomie podstawowym, ale DataTokens NIE mają obszaru w swoim słowniku.
źródło
Aby uzyskać nazwę obszaru w widoku, w ASP.NET Core MVC 2.1:
źródło
Pobierz nazwę obszaru w widoku (.NET Core 2.2):
źródło
Wiem, że to bardzo stary post, ale możemy używać właściwości Values dokładnie w taki sam sposób, jak DataTokens
Url.RequestContext.RouteData.Values ["action"] zadziałało dla mnie.
źródło
Nie wiem dlaczego, ale zaakceptowana odpowiedź nie działa. Zwraca null z np. (Może o mvc, używam .net core)
Zawsze debuguję zmienną i pobieram z niej dane.
Spróbuj tego. Mi to pasuje
Szczegółowy przykład logiczny
źródło