2009-07-31 10 views
33

Mam SuperController, który zostanie odziedziczony po wszystkich kontrolerach. W konstruktorze próbuję zapełnić ViewData przy użyciu the ControllerName i ActionName.Uzyskaj Nazwa kontrolera i Nazwa akcji i zapełnij dane widoku na stronie wzorcowej?

Nie będę przekazywać nazwy ControllerName i ActionName jako ViewData. Mam metodę wymagającą ControllerName i ActionName i muszę przekazać zwracaną wartość metody jako ViewData.

Jak mogę to zrobić?

+0

uzyskania działania, nazwy kontrolera wziąć spojrzeć na to http://stackoverflow.com/a/31749391/4293929 – MstfAsan

Odpowiedz

3

Zakładając, że czytam swój post poprawnie, a nie próbujesz uzyskać dostęp do nazwy kontrolera/akcji w widoku, ale zamiast próbując coś z nimi zrobić i umieścić wynik w widoku danych:

Nie można tego zrobić w konstruktorze, ponieważ kontekst nie został jeszcze utworzony. Trzeba zastąpić metodę Initialize (. Należy pamiętać, że można przejść tylko w ten ControllerContext.RouteData do funkcji i niech go odebrać wartości potrzebnych)

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 

     //here the routedata is available 
     ViewData["controller_name"] = (ControllerContext.RouteData.Values["Controller"]; 
    } 

1

Musiałem dostać się na nich wiele z widoków, a ja uderzyłem z nieco innej strony - napisałem kilka metod rozszerzenia do HtmlHelpera, aby nadać bieżące ControllerName i ActionName. Trochę łatwiejsze w obsłudze, ponieważ nie musisz się martwić o nurkowanie do torby ViewData [] lub wstrzykiwanie rzeczy w odpowiednich miejscach.

+0

Myślę, że takie metody rozszerzenia byłyby bardziej odpowiednie dla UrlHelper, niż HtmlHelper. Te dwie wartości naprawdę nie mają nic wspólnego z HTMLem. –

+0

Dobra uwaga - myślę, że wdrożenie mogło zostać nawet refaktoryzowane w ten sposób. Teoria jest w przybliżeniu taka sama w obu przypadkach - wyciągnij, a nie wciśnij. –

6

Spróbuj tego:

RouteData.Values.First().Value.ToString() 
+0

Jeśli używasz niestandardowego routingu (np. 'Language/controller/action')' controller' może nie być pierwszym wpisem. –

+0

spójrz na to http://stackoverflow.com/a/31749391/4293929 – MstfAsan

Powiązane problemy