Shi*_*mar 6 asp.net-mvc asp.net-ajax asp.net-mvc-3
当ModelState在控制器中无效时,我想调用"OnFailure".
在我的LoginView中
@using (Ajax.BeginForm("Login", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "Login",InsertionMode = InsertionMode.Replace, OnSuccess = "Success", OnFailure = "onError" }))
{
}
Run Code Online (Sandbox Code Playgroud)
在控制器中
[httpPost]
public ViewResult Login(LoginModel model)
{
if (ModelState.IsValid)
{
}
else
{
ModelState.AddModelError("login is fail")
}
return View("Login",model)
}
Run Code Online (Sandbox Code Playgroud)
所以我想调用onSuccess方法,如果ModelState有效,如果失败,那么只调用OnError方法,显示模型状态的所有错误.
Dar*_*rov 19
这是你可以做的:
[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)
}
Run Code Online (Sandbox Code Playgroud)
然后你需要的就是Success函数:
@using (Ajax.BeginForm("Login", new AjaxOptions { HttpMethod = "POST", OnSuccess = "loginAjaxSuccess" }))
{
}
Run Code Online (Sandbox Code Playgroud)
你可以测试你在哪种情况下:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一下,如果您在刷新表单的情况下使用不显眼的客户端验证,则需要手动强制解析新的验证规则,否则下次尝试提交表单时,客户端验证会赢得'工作:
} 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');
}
Run Code Online (Sandbox Code Playgroud)
当您在ModelState中检测到问题时,将响应对象的StatusCode设置为400(您可以从System.Net.HttpStatusCode类获取代码)
这将触发onfailure方法.
硅
| 归档时间: |
|
| 查看次数: |
15966 次 |
| 最近记录: |