当ModelState在控制器中无效时,我想调用“OnFailure”.
在我的LoginView中
@using (Ajax.BeginForm("Login",new AjaxOptions { HttpMethod = "POST",UpdateTargetId = "Login",InsertionMode = InsertionMode.Replace,OnSuccess = "Success",OnFailure = "onError" })) { }
在控制器中
[httpPost] public ViewResult Login(LoginModel model) { if (ModelState.IsValid) { } else { ModelState.AddModelError("login is fail") } return View("Login",model) }
所以我想调用onSuccess方法,如果ModelState有效,如果失败,那么只调用OnError方法,显示模型状态的所有错误.
解决方法
这是你可以做的:
[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) }
然后你需要的就是Success函数:
@using (Ajax.BeginForm("Login",OnSuccess = "loginAjaxSuccess" })) { }
你可以测试你在哪种情况下:
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); } }
顺便说一下,如果您在刷新表单的情况下使用不显眼的客户端验证,则需要手动强制解析新的验证规则,否则下次尝试提交表单时,客户端验证会赢得’工作:
} 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'); }
原文地址:https://www.jb51.cc/aspnet/247104.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。