15

次のコードがあるとします。

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var a = filterContext.ActionParameters["someKey"];
        var b = filterContext.RouteData.Values["someKey"];          
        base.OnActionExecuting(filterContext);
    }
}

aとはどう違いbますか?

ルート データに対してアクション パラメーターを使用する必要があるのはいつですか? 違いはなんですか?

4

1 に答える 1

21

ActionParametersonを使用するOnActionExecutingと、アクションを処理する前にクライアント側から送信される値を変更できます。サンプル:

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.ActionParameters["customerId"] = 852;

        base.OnActionExecuting(filterContext);
    }
}

customerId パラメーターを使用するアクションがある場合、アクションにフィルターがあるため、アクション フィルターに設定された値を取得します。

次のような URL をリクエストすると、CustomerId の値/customer/detail/123が取得されます。852

[MyAction]
public ActionResult Detail(int customerId)
{
   // customerId is 852

   return View();
}

RouteData値はURLにあり、ルートテーブルによって処理されます。

于 2013-07-03T11:50:17.753 に答える