71 votes

Comment empêcher la soumission multiple de formulaires dans .NET MVC sans utiliser Javascript ?

Je veux empêcher les utilisateurs de soumettre des formulaires plusieurs fois dans .NET MVC. J'ai essayé plusieurs méthodes en utilisant Javascript, mais j'ai eu des difficultés à le faire fonctionner dans tous les navigateurs. Alors, comment puis-je empêcher cela dans mon contrôleur ? Existe-t-il un moyen de détecter les soumissions multiples ?

0 votes

0 votes

La plupart des réponses ci-dessous concernent l'utilisation de l'identifiant de formulaire. Voir ceci pour définir l'identifiant du formulaire : stackoverflow.com/q/2854616/3885927

3voto

Vous pourriez inclure une valeur cachée (aléatoire ou compteur) dans le message du formulaire, un contrôleur pourrait suivre ces valeurs dans une liste "ouverte" ou quelque chose de similaire ; chaque fois que votre contrôleur distribue un formulaire, il incorpore une valeur, qu'il suit, ce qui permet de l'utiliser dans un message.

1voto

Michael Shimmins Points 12740

En soi, non, mais en fonction de ce que le contrôleur fait réellement, vous devriez pouvoir trouver une solution.

Un enregistrement est-il créé dans la base de données pour que vous puissiez vérifier s'ils ont déjà soumis le formulaire ?

1voto

Mark Butler Points 11

Utilisez le modèle de conception Post/Redirect/Get.

PS : Il me semble que la réponse de Jim Yarbro pourrait avoir un défaut fondamental en ce sens que le __RequestVerificationToken stocké dans le HttpContext.Current.Session["LastProcessedToken"] sera remplacé lorsqu'un deuxième formulaire sera soumis (à partir d'une autre fenêtre de navigateur, par exemple). À ce stade, il est possible de soumettre à nouveau le premier formulaire sans qu'il soit reconnu comme une soumission en double. Pour que le modèle proposé fonctionne, ne faudrait-il pas qu'un historique de __RequestVerificationToken être nécessaire ? Cela ne semble pas faisable.

1voto

Leo Barbas Points 53

Il suffit d'ajouter ce code à la fin de votre page. J'utilise "jquery-3.3.1.min.js" et "bootstrap 4.3.1".

<script type="text/javascript">
    $('form').submit(function () {
        if ($(this).valid()) {
            $(this).find(':submit').attr('disabled', 'disabled');
        }
    });
</script>

0voto

server info Points 752

Vous pouvez également transmettre une sorte de jeton dans un champ caché et le valider dans le contrôleur.

Ou vous travaillez avec des redirections après avoir soumis des valeurs. Mais cela devient difficile si vous tirez un grand avantage d'ajax.

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