代码之家  ›  专栏  ›  技术社区  ›  Juho Rutila

C#:匿名类型作为ActionFilterAttribute的参数

  •  2
  • Juho Rutila  · 技术社区  · 16 年前

    我想在MVC2上定义以下属性:

    public class BackAttribute : ActionFilterAttribute
    {
       public BackAttribute(object routeDict)
       { // Set local route property according to routeDict }
    }
    

    属性将这样与匿名类型一起使用:

    [Back(new { action = "Index", controller = "Home" })]
    public ViewResult DoSome() ...
    

    我试图实现的是“back”属性,它定义了页面中的“back”按钮将指向的位置。前面的代码不能编译,因为它显然是一个常量表达式,不能在其中使用匿名类型。如何将匿名类型传递给属性或实现以下调用之一:

    [Back(new { action = "Index", controller = "Home"})]
    [Back(action = "Index", controller = "Home")]
    

    [Back(action = "Index", controller = "Home", id = "5", younameit = "dosome")]
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Bennor McCarthy    16 年前

    如前所述,不能传递匿名类型。

    你能做的是:

    public class BackAttribute : ActionFilterAttribute
    {
        public string Action { get; set; }
        public string Controller { get; set; }
    
        public BackAttribute() { }
    }
    

    这将使您能够做到:

    [Back(Action = "Index", Controller = "Home" )]
    public ViewResult DoSomething() { //...
    

        2
  •  0
  •   Thomas Levesque    16 年前

    不能。正如您所注意到的,属性参数必须是常量。

    推荐文章