Chciałem ustawić klasę CSS na mojej stronie wzorcowej, która zależy od bieżącego kontrolera i akcji. Mogę dostać się do regulatora prądu poprzez ViewContext.Controller.GetType().Name
, ale w jaki sposób mogę uzyskać aktualny działań (np Index
, Show
itd.)?
c#
asp.net-mvc
robale
źródło
źródło
W RC można także wyodrębnić dane trasy, takie jak nazwa metody akcji, jak ta
Aktualizacja do MVC 3
Aktualizacja do MVC 4
Aktualizacja do MVC 4.5
źródło
ViewContext.Controller.ValueProvider.GetValue("action").RawValue
+ odmianyAby uzyskać bieżący identyfikator w widoku:
Aby uzyskać bieżący kontroler:
źródło
ViewContext.RouteData.Values.ContainsKey(<key>)
pierwszym.Wiem, że to jest starsze pytanie, ale widziałem je i pomyślałem, że może zainteresuje Cię alternatywna wersja, niż pozwalanie twojemu widokowi obsługiwać pobieranie danych potrzebnych do wykonania zadania.
Moim zdaniem łatwiejszym sposobem byłoby zastąpienie metody OnActionExecuting . Przekazano Ci ActionExecutingContext, który zawiera członka ActionDescriptor, którego możesz użyć do uzyskania poszukiwanych informacji, którym jest ActionName, i możesz także uzyskać dostęp do ControllerDescriptor, który zawiera ControllerName.
Mam nadzieję że to pomoże. Jeśli cokolwiek, to przynajmniej pokaże alternatywę dla każdego, kto przyjdzie na twoje pytanie.
źródło
Widziałem różne odpowiedzi i wymyśliłem pomocnika klasy:
Tak więc w View (lub master / layout) możesz używać go w ten sposób (składnia Razor):
Mam nadzieję, że to pomoże.
źródło
Możesz pobrać te dane z RouteData obiektu ViewContext
źródło
W MVC powinieneś dostarczyć widokowi wszystkie dane, nie pozwalając widokowi zbierać własnych danych, więc możesz ustawić klasę CSS w akcji kontrolera.
i wybierz tę wartość z ViewData w swoim widoku
źródło
Głosuję za tym 2:
i
Możesz pobrać zarówno nazwę fizyczną bieżącego widoku, jak i akcję, która go uruchomiła. Może być przydatny na częściowych stronach * .acmx do określenia kontenera hosta.
źródło
Używam ASP.NET MVC 4, a to, co zadziałało dla mnie:
źródło
Rozszerzając odpowiedź Dale Ragana , jego przykład do ponownego użycia, stwórz klasę ApplicationController, która wywodzi się z kontrolera, a z kolei wszystkie inne kontrolery wywodzą się z tej klasy ApplicationController, a nie z kontrolera.
Przykład:
Na nowym ApplicationController utwórz właściwość o nazwie ExecutingAction z tym podpisem:
Następnie w metodzie OnActionExecuting (z odpowiedzi Dale'a Ragana) po prostu przypisz ActionDescriptor do tej właściwości, aby uzyskać do niej dostęp w dowolnym momencie na dowolnym kontrolerze.
źródło
Zastąp tę funkcję w swoim kontrolerze
źródło