2010-08-18 2 views
0

Dans la zone "Admin" de mon application, un objet doit être disponible en ViewData sur chaque page (pour affichage dans le modèle Master). J'ai déjà hérité de Controller, donc je ne peux pas faire une simple classe de base qui le gère. Quelle est une bonne solution de faire cela quand vous n'utilisez pas l'héritage? Un ActionFilter semble intéressant mais je ne veux pas le mettre sur tous les contrôleurs de la zone Admin. Je considère ce qui suit:ASP.NET MVC 2 - Définir ViewData sur chaque requête dans une zone spécifique (sans héritage)

  • personnalisé ControllerFactory qui détecte la région ainsi
  • Application_BeginRequest(), bien que je ne connais pas sur le contrôleur puis lancé.

Peut-être avez-vous une meilleure solution?

+0

Quel type de données est-ce? Peut-être que Html.RenderAction() est une meilleure solution? –

+0

C'est l'utilisateur actuellement connecté, il a donc des dépendances à la fois sur la base de données et IPrincipal. – ciscoheat

+0

Ok, je vois. J'utiliserais probablement Html.RenderAction() alors. À mon avis, c'est la solution la plus propre. –

Répondre

0

Dans ce cas, je voudrais créer une action séparée qui exécute une vue partielle qui affiche les données dont vous avez besoin. À mon avis, c'est la solution la plus propre pour ce genre de problème et elle est facilement testable et réutilisable.

0

J'ai une liste déroulante sur ma page maître. vous n'avez pas besoin de viewdata pour cela. je l'ai fait comme ça

Code

sur masterpage:

<%= Html.DropDownList("schselectr", MVC2_NASTEST.MvcApplication.masterSchooljaarList())%> 

dans Global.asax.cs

public static SelectList masterSchooljaarList() { 
     NASDataContext _db = new NASDataContext(); 
     List<Schooljaar> newlist = _db.Schooljaars.ToList(); 
     return new SelectList(_db.Schooljaars.ToList(), "Sch_Schooljaar", "Sch_Schooljaar"); 
    } 

si simplement, il appelle la méthode, qui renvoie les données dont j'ai besoin, chaque fois vous chargez la page. facile, propre, efficace.

+0

Je viens de commenter que l'objet de données est l'utilisateur actuellement connecté, il a donc des dépendances à la fois sur la base de données et IPrincipal. Faire un contexte statique dans un cadre favorable aux tests comme celui-ci n'est pas une bonne solution de toute façon. Mais merci de répondre bien sûr! – ciscoheat

+0

pouvez-vous envoyer l'IPrincipal avec elle? <% = Html.DropDownList ("schselectr", MVC2_NASTEST.MvcApplication.masterSchooljaarList (HttpContext.Current.User.Identity))%> – Stefanvds

+0

La raison pour laquelle vous ne voulez pas le faire de cette façon est que cela viole beaucoup de modèles de conception (y compris mvc) et il est difficile à tester. –

Questions connexes