J'ai un ViewPage
, Index.aspx. Dans ce document, je:ASP.NET MVC: Getting ViewModel en vue partielle sur ViewPage
<%= Html.Partial("~/Index/ViewUserControl/Promo.ascx, new PromoViewModel()); %>
Maintenant, le constructeur pour PromoViewModel
a besoin d'un objet MemcachedCache
que le contrôleur de l'indice utilise également.
Comment est-ce que je devrais passer ce MemcachedCache
dans ma vue partielle?
Dois-je mettre l'instance MemcachedCache
dans le ViewData
et le faire?
<%= Html.Partial("~/Index/ViewUserControl/Promo.ascx,
new PromoViewModel(ViewData["cache"] as MemcachedCache)); %>
Index.aspx n'est pas une vue fortement typée; il n'utilise pas de modèle de vue. Mais dois-je le taper fortement avec un modèle de vue qui a un membre public Cache
, puis y accéder via le Model
?
<%= Html.Partial("~/Index/ViewUserControl/Promo.ascx,
new PromoViewModel(Model.Cache); %>
Maintenant, je trouve avec MVC3, il y a une troisième option: je peux mettre un membre ViewModel
dans le contrôleur d'index avec le membre Cache
, et l'utiliser comme ceci:
<%= Html.Partial("~/Index/ViewUserControl/Promo.ascx,
new PromoViewModel(ViewModel.Cache); %>
Ce qui est plus approprié? Cela semble un peu confus/stupide pour moi.
J'aime ça. C'est la direction que j'avais l'intention d'atteindre si je pouvais embarquer mes collègues. Merci pour le support de sauvegarde. :) – SnickersAreMyFave
+1 pour la justification; Je préfère l'option deux pour cette raison moi-même. –
+1 c'est comme ça que je le fais. Je veux ajouter que selon le scénario, vous pouvez faire des levages supplémentaires dans un filtre d'action. – eglasius