Asp.net mvc:acceso al modelo de vista desde un filtro de acción personalizado

Asp.net mvc:acceso al modelo de vista desde un filtro de acción personalizado

El modelo está en:

filterContext.Controller.ViewData.Model

No sé por qué pero filterContext.Controller.ViewData.Model siempre es nulo incluso cuando el enlace del modelo se ejecuta antes de OnActionExecuted . Encontré una solución usando el OnModelUpdated evento para establecer esa propiedad antes.

Tengo el modelo de carpeta:

public class CustomModelBinder: DefaultModelBinder
{
    protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        controllerContext.Controller.ViewData.Model = bindingContext.Model;
        base.OnModelUpdated(controllerContext, bindingContext);
    }
}

Después de eso, debe configurar el archivador predeterminado para su nuevo modelo de archivador en Application_Start() sección en Global.asax:

ModelBinders.Binders.DefaultBinder = new CustomModelBinder();

Finalmente puedes acceder a tu Model en un ActionFilterAttribute :

public class TraceLog : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        //filterContext.Controller.ViewData.Model now isn't null
        base.OnActionExecuted(filterContext);
    }
}

Haciendo el base.OnActionExecuted() llamar a la última línea del método resolvió el problema 'El modelo es nulo' para mí.

(Este es un comentario a la respuesta de @Steven Lyons, pero lo estoy publicando como respuesta porque no puedo comentar).