Il pattern PRG è ok, ma ho fatto questo:
Controller di base:
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (TempData["ModelState"] != null && !ModelState.Equals(TempData["ModelState"]))
ModelState.Merge((ModelStateDictionary)TempData["ModelState"]);
base.OnActionExecuted(filterContext);
}
Azione (Sto utilizzando xVal):
try
{
user.Login();
AuthenticationManager.SignIn(user);
}
catch (RulesException rex)
{
// on bad login
rex.AddModelStateErrors(ModelState, "user");
TempData["ModelState"] = ModelState;
return Redirect(Request.UrlReferrer.ToString());
}
L'azione genera un'eccezione, aggiunge ModelState a TempData e reindirizza nuovamente al referrer. Poiché l'azione viene intercettata, OnActionExecuted viene ancora eseguito, ma la prima volta attorno a ModelState è uguale a TempData ["ModelState"], quindi non si desidera unire con se stessi. Quando viene eseguita l'azione di reindirizzamento, OnActionExecuted viene nuovamente attivato. Questa volta, se c'è qualcosa in TempData ["ModelState"], si fonde con ModelState di questa azione.
È possibile estenderlo a più modelli utilizzando TempData ["ModelState.user"] = ModelState e quindi unendo tutti gli oggetti TempData che iniziano con ModelState.
fonte
2009-04-11 22:18:44
L'unica cosa che mi irrita più su forum, è quando chiedo una cosa, la gente risponde qualcosa di diverso. E qui ho fatto la stessa cosa! –