2009-03-22 5 views
2

J'ai une certaine expérience avec ASP.NET MVC, mais seulement avec une application web où le contenu de la page maître ne change pas. Je me demandais comment vous gérer un site où, par exemple, le menu (qui est sur la page maître) est chargé à partir d'une base de données. Où chargeriez-vous ces données?Comment cela se ferait-il dans ASP.NET MVC?

Dans WebForms, vous devez charger le menu dans le code-behind de la page maître, ou avoir le menu en tant que contrôle utilisateur et effectuer le chargement dans le code-behind de celui-ci. Mais où est-ce fait dans MVC? Est-ce que vous créez une classe qui hérite de Controller que vous utilisez pour tous vos Contrôleurs et qui charge le menu à chaque invocation d'Action (je ne sais pas si c'est possible, mais cela semble probable)? Ou créez-vous une méthode utilitaire que vous appelez dans chaque Action où vous le voulez (parce que certaines Actions peuvent seulement retourner une vue partielle qui ne rechargera pas le menu), ce qui - bien que pas désastreux - semble un peu fatiguant .

Ou vous pécheriez contre MVC et le chargeriez-vous simplement dans le code-behind de la page maître?

Quelle est la meilleure approche à ce sujet (bien sûr, pas limité à mes solutions)?

Répondre

1

ActionFilter s sont utilisés pour intercepter une requête et effectuer un traitement. Vous pouvez les utiliser.

Est-ce un péché contre le modèle MVC?

Vous rompez le modèle MVC dans une certaine mesure. Mais le point de plus haut niveau est: est-ce que cela apporte beaucoup plus de valeur si vous vous forcez à ne pas le casser? Je ne pense pas que cela vous pose beaucoup de problèmes, alors gardez la simplicité et la maintenabilité à l'esprit et choisissez la façon dont vous le feriez dans votre situation spécifique.

0

Je voudrais créer un type de modèle dont la page maître tire ses données. Déterminez ensuite le type de modèle de la page à partir du MasterModel.

Le contrôleur remplit une instance du PageModel et la page maître le récupère.

(Vous pouvez également le modèle de la page principale pourrait être une interface mise en œuvre par les modèles des pages.)

NB. Dans les CTP MVC, cela nécessitait certaines classes intermédiaires pour remplacer la correspondance de type pour obtenir les données de classe de base. Je ne sais pas si cela a été corrigé dans RTM.

0

L'assemblage à terme ASP.NET MVC (more info here) contient une méthode d'extension qui vous permet de le faire dans votre page maître:

<% Html.RenderAction<NavigationController>(c => c.Show()); %> 

Vous avez besoin pour référencer l'assembly et ajoutez l'espace de noms "Microsoft.Web.Mvc" dans votre fichier web.config pour que cela fonctionne.