我有一个枚举:
public enum Navigation
{
Top = 0,
Left = 2,
Footer = 3
}
我有一个控制器动作:
public ActionResult Quotes()
{
return View();
}
我希望能够按照以下方式装饰我的行动:
[Navigation.Top]
public ActionResult Quotes()
{
return View();
}
任何想法如何实现,我可能必须创建一个自定义属性,但我如何将这个枚举纳入其中?
答案 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();
}