Ajax.BeginForm OnFailure invoked when ModelState is InValid

前端 未结 2 1697
悲哀的现实
悲哀的现实 2021-02-02 04:19

I want to call \"OnFailure\" when ModelState is not valid in controller.

In My LoginView

 @using (Ajax.BeginForm(\"Login\", new AjaxOptions { HttpMethod         


        
2条回答
  •  迷失自我
    2021-02-02 04:40

    Here's what you could do:

    [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)
    }
    

    and then all you need is the Success function:

    @using (Ajax.BeginForm("Login", new AjaxOptions { HttpMethod = "POST", OnSuccess = "loginAjaxSuccess" }))
    {
    
    } 
    

    in which you could test in which case you are:

    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);
        }
    }
    

    By the way if you are using unobtrusive client side validation in the case of error where you are refreshing the form you will need to manually force the parsing of the new validation rules, otherwise next time you attempt to submit the form, client validation won't work:

    } 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');
    }
    

提交回复
热议问题