2010-10-27 5 views
0

j'ai un ENUM:attributs personnalisés et les agents recenseurs

public enum Navigation 
{ 
    Top = 0, 
    Left = 2, 
    Footer = 3 
} 

et moi avons une action de contrôleur:

public ActionResult Quotes() 
{ 
    return View(); 
} 

Je voudrais pouvoir décorer mon action comme suit:

[Navigation.Top] 
public ActionResult Quotes() 
{ 
    return View(); 
} 

Toute idée comment cela pourrait être accompli, je vais probablement devoir créer un attribut personnalisé, mais comment puis-je incorporer cet enum int o ça?

Répondre

3

Une approche:

public static class Navigation{ 
    public class Top:ActionFilter /*any attribute*/{ 
    //magic 
    } 
    public class Left:ActionFilter{ 
    //magic 
    } 
} 

[Navigation.Top] 
public ActionResult Whatever(){} 

Si vous voulez utiliser les énumérations, je crains que vous ne serez pas en mesure de les utiliser comme attributs. Mais vous pouvez le passer à l'attribut en tant qu'argument. Quelque chose comme ceci:

public class NavigationAttribute:Attribute{ 
    public Navigation Place {get;set;} 
} 

[Navigation(Place=Navigation.Top)] 
public ActionResult Whatever(){} 
+0

Insane ... je faisais plus ou moins les mêmes, cependant, je ne l'ai pas hérité de ActionFilterAttribute .... Merci pour l'aide, c'est exactement ce que je avais besoin –

+1

puis marquer comme répondre. – Dialecticus

1

attribut annotations ne peuvent être créés avec les classes dérivées de System.Attribute classe. Par conséquent, il n'est pas possible d'utiliser directement enum.

Toutefois, il est possible de transmettre votre valeur enum au constructeur de l'attribut personnalisé. Comme ceci:

enum Navigation 
{ 
    Top = 0, 
    Left = 2, 
    Footer = 3, 
} 
class NavigationAttribute: Attribute 
{ 
    Navigation _nav; 
    public NavigationAttribute(Navigation navigation){ 
     _nav = navigation; 
    } 
} 
... 
[Navigation(Navigation.Top)] 
public ActionResult Quotes() 
{ 
    return View(); 
} 
+0

merci, c'est aussi un travail soigné. et je suppose que si vous utilisez l'énumération ailleurs, il est plus logique de le faire de cette façon. –

Questions connexes