61 votes

Désactiver la validation côté client dans le bouton d'envoi "cancel" de MVC 3

OK, j'essaie des choses depuis des heures et j'ai besoin d'aide. J'essaie d'implémenter une page dans MVC 3 qui a des boutons "retour" et "suivant". Lorsque le bouton "retour" est cliqué, je veux désactiver la validation MVC côté client pour que ma méthode d'action s'exécute et envoie l'utilisateur à la page Web logique précédente. J'ai essayé ceci :

<script type="text/javascript">
  document.getElementById("backButton").disableValidation = true;
</script>

et ceci :

<input type="submit" name="backButton" value=" Back" 
 title="Go back to step 1." disableValidation="true" />

Mais quoi qu'il en soit, la validation JavaScript côté client entre en jeu et ne permet pas au bouton d'effectuer son post-back. Je pense que disableValidation ne fonctionne peut-être que dans MVC 2, et je suis censé faire autre chose dans MVC 3, mais je n'arrive pas à trouver d'exemples.

129voto

gdoten Points 1196

Quelle est cette force mystique qui fait que la réponse se révèle d'elle-même dès que vous posez une question quelque part ?

Il semble que, dans MVC 3, on puisse désactiver la validation côté client d'un bouton en lui ajoutant la classe "cancel". Donc dans mon exemple :

<input type="submit" name="backButton" value=" Back"
 title="Go back to step 1." class="cancel" />

fonctionne parfaitement. Et aucun attribut ID n'est nécessaire non plus. Si vous avez une classe de style réelle sur le bouton, il suffit de faire ceci :

<input type="submit" name="backButton" value=" Back"
 title="Go back to step 1." class="style-name cancel" />

3 votes

Je soupçonne la "force mystérieuse" de vous aider à aider les autres :) J'avais un problème similaire et votre solution est apparue rapidement. Merci. +1

8 votes

J'ai entendu de nombreuses explications à ce sujet, mais c'est le "rubber ducking" que je préfère. Il s'agit de la façon dont vous comprenez beaucoup mieux un problème lorsque vous l'expliquez vous-même aux autres. Vous l'expliquez avec plus de détails que vous ne l'aviez jamais imaginé, ce qui vous permet de mieux comprendre le problème. Une bonne chose à faire est d'y penser, ou d'en parler, comme si vous l'expliquiez à quelqu'un que vous souhaitez voir vous aider. Vous trouverez peut-être la réponse. Le "canard en caoutchouc" vient de quelqu'un qui mettait un canard en caoutchouc sur son écran. Il expliquait ensuite au canard en caoutchouc son problème et parfois, il le résolvait.

11 votes

Wtf. Je croyais que le but de MVC était de séparer les problèmes. Dans ce cas, comment diable est-ce que ça PAS violer la séparation des préoccupations ? L'utilisation de CSS pour affecter réellement la fonctionnalité de la vue ? J'aime que cela fonctionne, mais je me sens sale pour l'avoir utilisé.

5voto

da_jokker Points 794

Je sais... très vieille question... Pourtant, elle était en tête des résultats de recherche quand j'ai regardé.

Pour MVC 4 (et un BUTTON), il semble (du moins pour moi) que la réponse soit simplement d'ajouter l'attribut formnovalidate="formnovalidate"

 <button type="submit" class="btn btn-outline-success border-0" formnovalidate="formnovalidate" name="command" value="Back" title="Back">
    <span class="fas fa-arrow-left" aria-hidden="true"></span>
    &nbsp;Back
</button>

1voto

David Points 11

Les scripts de validation semblent être liés au type de soumission. input . En changeant cancel à un bouton, la validation est ignorée :

<button type="button" onclick="document.location.href('Index')">Cancel</button>

0 votes

Pas dans le MVC 4. Il se comporte toujours (du moins pour moi) de la même manière pour un bouton comme entrée.

-1voto

user3963360 Points 1

Je l'utilise pour le bouton

$("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;
        });
    }
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X