ASP.net MVC Validation Hook

10,376

As jQuery/Validation docs says, you could use invalidHandler to react when an invalid form is submitted.

But since MVC unobtrusive validation instantiates the Validation itself, you have to hook this event later.

Using exactly the same mechanism as the jQuery/Validation does: you could bind your code to the form elements custom event 'invalid-form.validate', witch corresponds to the invalidHandler!

$(document).ready(function() {
    $('#myform').bind('invalid-form.validate',function(){
        alert('invalid form!');
    });
});

to give your form an id use:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myform" })) {
} 

Update:

An alternative way to get the existing validation object is calling validate() on the form. If a validator for this form was already created, it will be returned:

Edit: after initialization occured, changing .settings.invalidHandler is too late for binding. So the following snippet will not work [anymore] unless you re-init the validator.

$(document).ready(function() {
    var existingValdiation = $("#myform").validate();
    //the settings property corresponds to the options parameter
    existingValdiation.settings.invalidHandler = function (form) {
        alert('invalid form!');
    };
    // not recommended:
    // re-init would bind settings.invalidHandler to 'invalid-form.validate'
    // existingValdiation.init();
});
Share:
10,376

Related videos on Youtube

Dismissile
Author by

Dismissile

Updated on June 04, 2022

Comments

  • Dismissile
    Dismissile almost 2 years

    I have the following view in ASP.net MVC 3:

    @model Models.CreateProjectViewModel
    
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.min.js")"></script>
    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"></script>
    
    @using( Html.BeginForm() ) {
        @Html.TextBoxFor(m => m.ProjectName)
        @Html.ValidationMessageFor(m => m.ProjectName)
    
        <p>
            <input type="submit" value="Save" />
        </p>
    }
    

    I am using unobtrusive javascript with jQuery and the Fluent Validation framework.

    When I click the Save button and validation fails, is there some event I can hook into to call some custom javascript?

    function validationFailed() {
        // do something here only if validation failed
    }
    

    How would I tie into the validation so that when it failed (and only if it failed) I could call my validationFailed() function.

  • Rafael Merlin
    Rafael Merlin about 10 years
    Thank you. First option was perfect for me. =-)
  • Jernej Novak
    Jernej Novak about 10 years
    First option worked. Second did not. Should edit alternative or delete it? Thanks for the first one.