themarcuz/BusBook — Issue #4: Ajax Form in Partial View
Author: caval
Created: 2012-02-01 18:01:55+00:00
State: open

Se ne era già parlato ma non mi torna ancora: ho fatto la mia form di login come partial view che contiene un Ajax.BeginForm. Se quando faccio il submit del mio form ajax al server arriva un modello non valido (Model.IsValid != true perchè es. manca un campo obbligatorio) e io voglio ripresentare la partial view con gli errori di validazione mostrati, richiamando PartialView(Model) sul client mi arriva solo la partial view senza la pagina "padre" che la contiene.
Il Lunazzi mi dice che in caso di Model.IsValid = false devo fare un return View e non return PartialView, ma questo vorrebbe dire che la mia partial view deve conoscere il padre che la contiene e non mi torna...

con la validazione lato client sto problema non si vede perchè non arriva mai al server un modello valido, però c'è comunque...

private ActionResult ShowLogin(UtenteLoginView utente)
{
var loggedUtente = Session.getLoggedUtente();

if (loggedUtente == null)
return PartialView("Login", (utente == null ? new UtenteLoginView() : utente));
else
return PartialView("Logout", loggedUtente);
}

[HttpPost]
public ActionResult Login(UtenteLoginView utente)
{
if (ModelState.IsValid)
{

var authResult = LoginHelper.AuthenticateUtente(utente.Username, utente.Password);

if (authResult.IsAuthenticated)
Session.Login(authResult.AuthenticatedUtente);
else
{
utente.LoginErrorMessage = authResult.AuthErrorMessage;
utente.Password = "";
}
}

//TODO: deve funzionare anche senza la validazione lato client!
return ShowLogin(utente);
}