OK, been trying things for hours and could use some help. I'm trying to implement a page in MVC 3 that has "back" and "next" buttons. When the back button is clicked I want to disable client-side MVC validation from running so that my action method will run and send the user to the previous logical web page. I've tried this:
<script type="text/javascript">
document.getElementById("backButton").disableValidation = true;
</script>
and this:
<input type="submit" name="backButton" value="← Back"
title="Go back to step 1." disableValidation="true" />
But no matter what, the cilent-side validation JavaScript kicks in and won't let the button do its post-back. I'm thinking that disableValidation
only works in MVC 2 perhaps, and I'm supposed to be doing something else in MVC 3, but cannot seem to find any examples.
What is this mystical force that causes the answer to reveal itself as soon as you post a question somewhere?
It looks like in MVC 3 you disable client-side validation on a button by adding the class "cancel" to it. So in my example:
<input type="submit" name="backButton" value="← Back"
title="Go back to step 1." class="cancel" />
works great. And no ID attribute is needed either. If you have an actual style class on the button, just do this:
<input type="submit" name="backButton" value="← Back"
title="Go back to step 1." class="style-name cancel" />
The validation scripts seem to be linked to the submit type input
. By changing cancel
to a button, validation is skipped:
<button type="button" onclick="document.location.href('Index')">Cancel</button>
I use this for button
$("button").each(function (elem) {
var button = $($("button")[elem]);
button.addClass('cancel');
if (button.attr('type') == 'submit') {
button.click(function (e) {
var validator = button.closest('form').validate();
validator.cancelSubmit = true;
});
}
});