Свързване на параметър ASP.NET MVC ActionFilter

Ако имате обвързан с модел параметър в метод на действие, как можете да стигнете до този параметър във филтър на действие?

[MyActionFilter]
public ActionResult Edit(Car myCar)
{
    ...
}

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public void OnActionExecuted(ActionExecutedContext filterContext)
    {
        //I want to access myCar here
    }

}

Има ли все пак да получите myCar, без да минавате през променливите на формуляра?


person Shlomo    schedule 25.12.2009    source източник
comment
Ето страхотна статия, обясняваща как да получите достъп до ActionParameters за целите на оторизация: joe-stevens.com/2010/08/19/   -  person Michael La Voie    schedule 17.04.2013


Отговори (1)


Не съм сигурен за OnActionExecuted, но можете да го направите в OnActionExecuting:

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // I want to access myCar here

        if(filterContext.ActionParameters.ContainsKey("myCar"))
        {
            var myCar = filterContext.ActionParameters["myCar"] as Car;

            if(myCar != null)
            {
                // You can access myCar here
            }
        }
    }
}
person eu-ge-ne    schedule 25.12.2009
comment
Не мисля, че можете да използвате ActionFilter там, това е ActionFilterAttribute. Освен това откъде взехте свойството ActionParameters на ActionExecutedContext? - person Yuriy Faktorovich; 25.12.2009
comment
Благодаря, това е ActionFilterAttribute - прав си. Не съм забелязал, че въпросът е за OnActionExecuted. - person eu-ge-ne; 25.12.2009
comment
Благодаря момчета. Редактирах първоначалния си въпрос, за да посоча ActionFilterAttribute. - person Shlomo; 25.12.2009
comment
Страхотен отговор обаче if(filterContext.ActionParameters[myCar] is Car) filterContext.ActionParameters[myCar] as Car е малко по-добър. - person Dean Martin; 19.09.2017