Non c'è nessun modello ancora in caso OnActionExecuting
. Il modello viene restituito dall'azione del controller. Quindi hai un modello all'interno dell'evento OnActionExecuted
. È qui che puoi cambiare i valori. Per esempio, se si assume che la vostra azione di controllo ha restituito un ViewResult e la passò qualche modello ecco come si potrebbe recuperare questo modello e modificare alcune proprietà:
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";
}
}
Se si desidera modificare il valore di alcune proprietà del modello vista viene passato come argomento di azione, quindi consiglierei di farlo in un raccoglitore di modelli personalizzato. Ma è anche possibile ottenerlo nell'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";
}
}
fonte
2012-05-03 07:26:42
Puoi spiegare perché dovresti farlo? Sospetto che ci sia un modo migliore per realizzare ciò di cui hai bisogno. – DMulligan
Una delle proprietà del modello determina come sarà la vista: Editor o Display e voglio impostarlo in base alle autorizzazioni utente –
perché si desidera mantenere qualcosa di simile in base alla proprietà del modello. invece dovresti controllare il permesso dell'utente all'interno della vista e decidere quale modello renderizzare (editor o display) –