Questa è probabilmente ancora una domanda per principianti.Viste parziali ASP.Net MVC che mantengono lo stato del modello?
Quando creo un'applicazione ASP.NET MVC2, un controller account con un account di accesso di azione viene creato in questo modo:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Ora, io non voglio avere una pagina di login, voglio avere controlli di accesso come parte di una pagina più grande. Così, ho cambiato Login.aspx a Login.ascx e sto integrando nel mio vista principale sia con Html.RenderPartial o Html.RenderAction.
Entrambe le opere come un fascino se il login è successo. Se non lo è, il
return View(model)
mi sta uccidendo. Quello che voglio è quello di tornare alla mia pagina principale (lo chiamano Home/Index), ma con le informazioni di errore della vista parziale.
return RedirectToAction("Index", "Home")
Ovviamente non funziona.
Suggerimenti?
Hm, probabilmente potrei inserire l'intero LogOnModel nel TempData. Ma per me questo sembra essere un hack. Quale sarebbe la soluzione pulita qui? – Sparhawk
Sì, è un trucco la soluzione pulita è scrivere un filtro per questo. Guarda questa domanda e la mia risposta per un esempio http://stackoverflow.com/questions/2503032/where-to-use-controller-httpcontext/2503085#2503085 Nel filtro si controlla se lo stato del modello è valido se non lo è aggiungi i valori, naturalmente sarebbe meglio metterli in un attributo personalizzato perché non credo che ti serva in tutte le azioni di un controller. È quindi possibile utilizzare l'attributo sulle azioni in cui si desidera mantenere lo stato del modello. – Chino
Meh. Ecco a cosa serve TempData. La mia ipotesi è che non ti piacciono le stringhe magiche e la mancanza di dati fortemente tipizzati. È giusto, ma è una scelta di stile, non un trucco. – a7drew