Plus j'utilise ASP.NET MVC, plus je l'aime. Cependant, dans le cas de l'affichage de données de modèle sur des pages maîtres, il semble y avoir plusieurs façons de le faire. Je ne suis pas sûr de la meilleure solution. Mon exemple serait un site de commerce où je veux afficher une liste de catégories de produits sur chaque page et montrer également l'état du panier des visiteurs. Dans les formulaires Web asp.net, j'utilise généralement les contrôles utilisateur en effectuant chacun leur propre liaison de données pour récupérer les données requises.ASP.NET MVC Master Page Données
Dans MVC, toutes les données doivent être transmises par le contrôleur.
Donc, en ce qui concerne les catégories, la solution la plus simple semble être de transmettre ceci dans Voir les données dans l'action du contrôleur:
ViewData["Categories"] = _service.GetCategories();
Cependant, ce faisant pour chaque action est pas très sec pour la suite this article j'ai créé un contrôleur de base qui ajoute les données nécessaires à mon ViewData:
public class AppController : Controller
{
IAppService _service;
public AppController() { }
public AppController(IAppService appService)
{
_service = appService;
SetSiteData();
}
private void SetSiteData()
{
ViewData["Categories"] = _service.GetCategories();
}
}
J'ai ensuite créé une extension pour ViewMasterPage:
public static void RenderCategoryList(this ViewMasterPage pg) {
pg.Html.RenderPartial("CategoryList", pg.ViewData["Categories"]);
}
Et dans mon MasterPage:
<div>
<%this.RenderCategoryList(); %>
</div>
Cela semble être une approche tout à fait propre. Cependant, est-ce le meilleur moyen que j'ai vu aussi des suggestions de créer un ViewModel pour votre MasterPage. Je pourrais voir que peut-être que vos données ViewModel se développent, cela peut être une meilleure solution.
En ce qui concerne l'état du chariot, je suppose que je ferais quelque chose de similaire mais je ne suis pas sûr que RenderAction serait plus approprié (When to use RenderAction vs RenderPartial with ASP.NET MVC). Merci, Ben
+1 pour RenderAction, c'est presque une solution parfaite, après que MVC2 soit sorti et que vous puissiez mettre en cache les résultats de RenderAction, ce sera parfait. – mxmissile
Dois-je faire quelque chose pour utiliser l'appel RenderAction fortement typé que vous utilisez ci-dessus? J'utilise mvc 2.0 preview et ne semble pas pouvoir construire la méthode RenderAction de cette façon. –