ASP.NET MVC — набор RouteData в действии фильтра, не связанный с параметром метода действия

У меня есть фильтр действий, который (среди прочего) добавляет данные в 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;

Кто-нибудь знает, почему?


person Hossein    schedule 26.06.2013    source источник


Ответы (2)


Фильтр привязан к действию (методу). Следовательно, к моменту запуска фильтра значения параметров уже выбраны. Представьте ситуацию, если то, что вы просили, сработало:

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

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

Вы ссылаетесь на http://mysite.com/mycontroller/SomeActionMethod без параметра запроса. Итак, он должен вызвать первое действие. Но если бы ваш фильтр делал то, что вы хотели, после его запуска он должен вызвать второе действие. Но у этого НЕТ фильтра, поэтому он должен вызывать первый. И круглый и круглый.

person James Curran    schedule 27.06.2013

Вот статья, в которой рассказывается, как изменить значения параметров из фильтра действий:

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

person Chris Pietschmann    schedule 12.05.2014