自定义属性和枚举器

时间:2010-10-27 10:51:48

标签: c# asp.net-mvc-2 enums custom-attributes

我有一个枚举:

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

我有一个控制器动作:

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

我希望能够按照以下方式装饰我的行动:

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

任何想法如何实现,我可能必须创建一个自定义属性,但我如何将这个枚举纳入其中?

2 个答案:

答案 0 :(得分:3)

一种方法:

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

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

如果您确实想使用枚举,我担心您将无法将它们用作属性。但是您可以将其作为参数传递给属性。像这样:

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

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

答案 1 :(得分:1)

属性注释只能使用从System.Attribute类派生的类创建。

因此,无法直接使用enum

但是,可以将枚举值传递给自定义属性的构造函数。像这样:

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();
}