4

私は(とりわけ)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;

誰でも理由を知っていますか?

4

2 に答える 2

3

フィルターはアクション (メソッド) に関連付けられます。したがって、フィルタが実行されるまでに、パラメータの値はすでに選択されています。あなたが尋ねたことがうまくいった場合の状況を想像してください:

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

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

http://mysite.com/mycontroller/SomeActionMethod クエリ パラメータなしで参照します。したがって、最初のアクションを呼び出す必要があります。しかし、フィルタが実行された後に希望どおりに動作する場合は、2 番目のアクションを呼び出す必要があります。しかし、それにはフィルターがないため、最初に呼び出す必要があります。そしてラウンド&ラウンド。

于 2013-06-27T12:04:01.477 に答える
1

アクション フィルターからパラメーター値を変更する方法を説明する記事を次に示します。

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

于 2014-05-12T21:51:47.320 に答える