2010-06-21 3 views
2

Alors récemment, j'ai trouvé un moyen de construire dynamiquement un menu de barre de navigation où le contrôleur (et son index ActionMethod) serait répertorié dans une barre horizontale en haut de chaque page (via Site.Master), mais aussi basé sur les rôles assignés à l'utilisateur. Chaque contrôleur répertorié répertorie également (dans une liste déroulante verticale) les méthodes ActionMethod disponibles pour l'utilisateur.Comment attacher une description à chaque méthode ActionMethod dans un contrôleur (ASP.net MVC)?

Voir ici pour le code que j'ai écrit à create an Extended Controller class for ASP.NET MVC qui a résolu le problème mentionné ci-dessus. J'ai réalisé que je voulais également créer automatiquement une page d'index par défaut pour chaque contrôleur qui répertorie toutes les méthodes d'action disponibles et une courte description de chaque méthode ActionMethod, mais réfléchissait à la façon de joindre la description à la méthode ActionMethod.

Je suppose que je dois faire 3 choses:

(1) Créer mon propre attribut, par exemple, la description et décorer chaque ActionMethod dans chaque contrôleur comme ceci:

[Authorize(Roles="Admin")] 
public class SomeController : ExtController 
{ 
    [Description("This method adjusts all of your widgets making them better.")] 
    public ActionResult TweakWidgets() 
    { 
     return View(); 
    } 
} 

(2) Créez une méthode publique ActionResult Index() dans ma classe de base (ExtController) qui sera utilisée par chaque classe héritant de ExtController pour afficher une liste des méthodes ActionMethod et de leurs descriptions disponibles pour cet utilisateur.

(3) Créez une vue Index.aspx dans Views/Shared qui va construire une telle page.

Est-ce une approche raisonnable? Y a-t-il une meilleure manière de faire cela?

Répondre

2

Cela semble être une approche raisonnable.

Cependant, il existe déjà une classe DescriptionAttribute dans System.ComponentModel que vous pourriez probablement exploiter. Il y a un exemple de code pour réfléchir sur cette propriété aussi bien sur la page de manuel.

+0

Ahh, merci pour le pointeur. Je déteste réinventer la roue et je ne savais pas s'il y avait déjà un attribut Description. – Pretzel

+0

Intellisense ne tirait rien pour moi, mais je n'avais pas référencé System.ComponentModel, donc ça aurait du sens ... Merci! – Pretzel

Questions connexes