2009-08-25 27 views
0

我不确定这是否可能,但我希望看到由我的ModelBinders创建的对象,而不是将它们作为参数传递给我的Action方法。在ActionFilters中访问由ModelBinders创建的对象

I.e.我想注册一个FooBinder和BarBinder,然后看一个Foo下面的方法

public void MyAction(Bar bar) 

或一个ActionFilter甚至理想。

这可能吗?

回答

2

要访问此:在你的过滤器

public ActionResult FizzAction(object foo) // <-- 
    {...} 

使用此:

public class BarFilter : ActionFilterAttribute 
{ 
public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    var foo = filterContext.ActionParameters["foo"]; 
    //do whatever you want with it 
} 
} 

编辑:

对于ActionMethodSelectorAttribute这可能帮助:

public class foo : ActionMethodSelectorAttribute 
    { 
     public override bool IsValidForRequest 
      (ControllerContext controllerContext, MethodInfo methodInfo) 
     { 
      ValueProviderResult valueResult; 
      controllerContext.Controller.ValueProvider 
       .TryGetValue("foo", out valueResult); 
     } 
    } 

检查出由K.斯科特艾伦this blog post

没有保修 - 没有使用过我自己 - 只是通过观察窗口找到。 :)

+0

谢谢Arnis。绝对是正确的答案。不过,我刚刚意识到它实际上不是我想访问的ActionFilter,而是一个ActionMethodSelectorAttribute。我猜这是不可能的...? – Gaz 2009-08-25 09:45:03

+0

片刻.. – 2009-08-25 09:58:49

+0

编辑我的帖子。我希望它有帮助。 – 2009-08-25 10:10:03

相关问题