No sé por qué, pero filterContext.Controller.ViewData.Model
siempre es NULL, incluso cuando se ejecuta el modelo se unen antes de OnActionExecuted
. Encontré una solución usando el evento OnModelUpdated
para establecer esa propiedad antes.
que tienen el modelo de aglutinante:
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 que usted necesita para configurar el enlazador predeterminado a su nuevo modelo de ligante en la sección Application_Start()
en Global.asax:
ModelBinders.Binders.DefaultBinder = new CustomModelBinder();
Por último se puede acceder su 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);
}
}
Siempre es nulo :( – Korayem
@Korayem - depende de qué tan pronto lo intente y acceda a él. Si lo obtiene después de que se haya ejecutado la acción del controlador, debe ser una instancia del modelo de vista. – JBeckton
Es nulo para mí en todos los métodos (OnActionExecuting, OnActionExecuted, OnResultExecuting, OnResultExecuted) –