簡體   English   中英

ASP.NET MVC - 在過濾器操作中設置的 RouteData 未綁定到操作方法參數

[英]ASP.NET MVC - RouteData set in filter action not bound to action method parameter

我有一個動作過濾器,它(除其他外)向 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;

有誰知道為什么?

過濾器附加到操作(方法)。 因此,當過濾器運行時,參數值已經被選定。 想象一下如果你問的問題有效的情況:

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

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

您引用沒有查詢參數的http://mysite.com/mycontroller/SomeActionMethod 那么它應該調用第一個動作。 但是,如果您的過濾器要執行您想要的操作,那么在它運行后,它應該調用第二個操作。 但是那個沒有過濾器,所以它應該調用第一個。 又圓又圓。

這是一篇介紹如何從操作過濾器修改參數值的文章:

http://haacked.com/archive/2010/02/21/manipulating-action-method-parameters.aspx/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM