2009-08-25 26 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

相關問題