No hay modelo sin embargo, en el caso de OnActionExecuting
. El modelo es devuelto por la acción del controlador. Entonces tienes un modelo dentro del evento OnActionExecuted
. Ahí es donde puedes cambiar los valores. Por ejemplo, si suponemos que su acción de controlador devuelve un ViewResult y se lo pasó algún modelo que aquí está cómo se puede recuperar este modelo y modificar alguna propiedad:
public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var result = filterContext.Result as ViewResultBase;
if (result == null)
{
// The controller action didn't return a view result
// => no need to continue any further
return;
}
var model = result.Model as MyViewModel;
if (model == null)
{
// there's no model or the model was not of the expected type
// => no need to continue any further
return;
}
// modify some property value
model.Foo = "bar";
}
}
Si desea modificar el valor de una propiedad del modelo de vista eso pasó como argumento de acción, entonces recomendaría hacer esto en una carpeta de modelo personalizado. Pero también es posible lograrlo en el evento OnActionExecuting
:
public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var model = filterContext.ActionParameters["model"] as MyViewModel;
if (model == null)
{
// The action didn't have an argument called "model" or this argument
// wasn't of the expected type => no need to continue any further
return;
}
// modify some property value
model.Foo = "bar";
}
}
¿Podría explicar por qué tendría que hacer esto? Sospecho que hay una mejor manera de lograr lo que necesita. – DMulligan
Una de las propiedades del modelo determina cómo se verá la vista: Editor o Pantalla y quiero configurarla de acuerdo con los permisos del usuario –
, ¿por qué quiere que algo como esto dependa de la propiedad del modelo? en su lugar, debe verificar el permiso del usuario dentro de la vista y decidir qué plantilla debe representar (editor o pantalla) –