Ecco cosa si potrebbe fare:
[HttpPost]
public ActionResult Login(LoginModel model)
{
if (ModelState.IsValid)
{
// everything went fine and we want to redirect in this case =>
// we pass the url we want to redirect to as a JSON object:
return Json(new { redirectTo = Url.Action("SomeController", "SomeAction") });
}
else
{
// there was an error => add an error message
ModelState.AddModelError("login is fail")
}
// return a partial view instead of a full vire
return PartialView("Login",model)
}
e poi tutto ciò che serve è la funzione di Successo:
@using (Ajax.BeginForm("Login", new AjaxOptions { HttpMethod = "POST", OnSuccess = "loginAjaxSuccess" }))
{
}
in cui si potrebbe verificare nel qual caso si trovi:
function loginAjaxSuccess(result) {
if (result.redirectTo) {
// the controller action returned a JSON result => it was a successful login
// => we redirect the browser to this url
window.location.href = result.redirectTo;
} else {
// the action returned a partial view with the form containing the errors
// => we need to update the DOM:
$('#Login').html(result);
}
}
Se si utilizza la convalida lato client non invadente in caso di errore in cui si sta aggiornando il formare dovrete forzare manualmente l'analisi delle nuove regole di convalida, altrimenti la prossima volta che si tenta di inviare il modulo, la validazione client non funzionerà:
} else {
// the action returned a partial view with the form containing the errors
// => we need to update the DOM
$('#Login').html(result);
// Now that the DOM is updated let's refresh the unobtrusive validation rules on the form:
$('form').removeData('validator');
$('form').removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse('form');
}
fonte
2012-09-26 10:24:47
Cosa fai nella funzione successo? Ti reindirizza? Da quanto ho capito, vuoi visualizzare i messaggi di errore nel caso in cui la convalida fallisca => vuoi restituire una vista parziale contenente il modulo di accesso e quindi aggiornare la porzione corrispondente dal tuo DOM. Ma per quanto riguarda il caso di successo? Cosa vuoi tornare al cliente in questo caso? Una vista? –
Grazie a Darin per la riproduzione di me sì, desidero reindirizzare in Success ma in Failure voglio chiamare solo OnFailure con un messaggio di errore. attualmente in applicazione chiama su metodo Success anche ModelState non è valido – Shivkumar