Я не знаю почему, но filterContext.Controller.ViewData.Model
всегда равно нулю, даже когда привязка модели выполняется до OnActionExecuted
. Я нашел решение, используя событие OnModelUpdated
, чтобы установить это свойство раньше.
У меня есть модель переплета:
public class CustomModelBinder: DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
controllerContext.Controller.ViewData.Model = bindingContext.Model;
base.OnModelUpdated(controllerContext, bindingContext);
}
}
После этого вам нужно установить связыватель по умолчанию для вашей новой связующей модели в разделе Application_Start()
в Global.asax:
ModelBinders.Binders.DefaultBinder = new CustomModelBinder();
Наконец, вы можете получить доступ к вашему Model
в ActionFilterAttribute
:
public class TraceLog : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
//filterContext.Controller.ViewData.Model now isn't null
base.OnActionExecuted(filterContext);
}
}