ASP.NET MVC "Ajax.BeginForm" executes OnSuccess even though model is not valid

Nippysaurus picture Nippysaurus · Sep 7, 2011 · Viewed 17.1k times · Source

I have a "submit feedback" form which uses "Ajax.BeginForm" to render a partial containing the form elements. The OnSuccess event is triggering even if the ModelState is not valid. Is this normal? I was expecting to be able to do a few postbacks resulting in an invalid model, then when the model is valid and there are no errors then the OnSuccess event would trigger?

Answer

Serj Sagan picture Serj Sagan · May 8, 2013

I handle this issue with a fairly simple javascript technique:

First setup your OnSuccess like this:

OnSuccess = "UpdateSuccessful(data)"

Then your javascript function like this:

function UpdateSuccessful(data) {
    if (data.indexOf("field-validation-error") > -1) return;

    // Do your valid stuff here
}

This way, there is no need to mess with your controller, or more importantly, your controller can return the Partial View with the model errors without doing anything weird, ie:

    public ActionResult SaveDetails(Project model)
    {
        if (ModelState.IsValid)
        {
            model.SaveProject();
        }

        return PartialView("ProjectForm", model);
    }

And in your AjaxOptions:

UpdateTargetId = "FormContents"

Now just make sure you have a div or something with id="FormContents" wherever you want your form displayed.