【问题标题】:Custom Attributes and enumerators自定义属性和枚举器
【发布时间】:2010-10-27 10:51:48
【问题描述】:

我有一个枚举:

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

我有一个控制器动作:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    一种方法:

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

    【讨论】:

    • Insane...我做的差不多,但是,我没有从 ActionFilterAttribute 继承...。感谢您的帮助,这正是我所需要的
    【解决方案2】:

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

    【讨论】:

    • thanx,这也是一个巧妙的解决方法。我想如果你在其他地方使用枚举,这样做更有意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-02
    • 2016-12-11
    • 2013-02-20
    • 1970-01-01
    • 2020-07-19
    • 2013-10-02
    • 1970-01-01
    相关资源
    最近更新 更多