2010-08-19 23 views
2

我想定义上MVC2以下属性:C#:匿名类型作为参数来ActionFilterAttribute

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(new { action = "Index", controller = "Home"})] 
[Back(action = "Index", controller = "Home")] 

(更新)甚至

[Back(action = "Index", controller = "Home", id = "5", younameit = "dosome")] 

回答

1

如前所述,您无法传递匿名类型。

你可以做的是这样的:

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

    public BackAttribute() { } 
} 

这将使你做到这一点:

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

但你仍然不能够随意添加其他属性。

+0

这正是我现在所做的。正如你所说,它不允许额外的属性(如“ID”和其他)。我可以使用命名参数还是将字典传递给属性? – 2010-08-20 05:15:26

0

你不能。你已经注意到了,属性参数必须是常量。