代码之家  ›  专栏  ›  技术社区  ›  stoic Kobus Kleynhans

自定义属性和枚举器

  •  0
  • stoic Kobus Kleynhans  · 技术社区  · 14 年前

    我有一个枚举:

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

    我有一个控制器动作:

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

    我希望能够将我的动作装饰如下:

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

    如果知道如何实现这一点,我可能需要创建一个自定义属性,但是如何将这个枚举合并到其中呢?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Arnis Lapsa    14 年前

    一种方法:

    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(){}
    
        2
  •  1
  •   elder_george    14 年前

    只能使用派生自 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();
    }