2

我有一個操作過濾器(其中包括),它將內容添加到RouteData中。但是,這個值並沒有被我的action方法中的參數拾取。任何想法爲什麼?ASP.NET MVC - 在過濾器操作中設置的RouteData未綁定到操作方法參數

行爲過濾器:

public class SomeFilter : FilterAttribute, IActionFilter 
{ 
    public void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var someData = new SomeClass(); 
     //do stuff 
     filterContext.RouteData.Values["someData"] = someData; 
    } 
} 

操作方法:

[SomeFilter] 
public ViewResult SomeActionMethod(SomeClass someData) 
{ 
    //someData is null here 
} 

請注意,我的操作方法內以下行不會返回東西在行動過濾器保​​存到它的數據:

SomeClass isNotNull = RouteData.Values["someData"] as SomeClass; 

任何人都知道爲什麼?

回答

2

過濾器附加到動作(方法)。因此,在過濾器運行時,參數的值已經被選擇。想象一下你所問的工作情況:

[SomeFilter] 
public ViewResult SomeActionMethod() 
{ 
    // .... 
} 

public ViewResult SomeActionMethod(SomeClass someData) 
{ 
    // ..... 
} 

你參考http://mysite.com/mycontroller/SomeActionMethod沒有查詢參數。那麼它應該叫第一個動作。但是如果你的過濾器要做你想做的事情,那麼在它運行之後,它應該調用第二個動作。但那個沒有過濾器,所以它應該叫第一個。輪一輪&。

+0

感謝詹姆斯,這實際上使有很大的意義 – Hossein

相關問題