J'ai un contrôleur de produit avec une action d'index, qui crée essentiellement le formulaire d'affichage pour l'action Post et Index (Post Action verbe) sur le produitController qui enregistre essentiellement le produit à DB, mais lorsque des erreurs de validation se produisent, je retourne une vue ( myModel) d'autre lors de l'enregistrement, je retourne RedirectToaction ("créé," produit ") mais pour une raison quelconque lorsque je pause dans le code, il frappe l'action du contrôleur de produit deux fois plus qu'une seule fois. Par conséquent, le produit a 2 enregistrements à la place. d'un.
public ActionResult Index()
{
return View()
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection fc)
{
// 2 calls are made to this controller
try
{
// save the product
return RedirectToAction("Created");
}
catch(Exception ex)
{
// recreate the model from form collection
return View(viewData); // when a validation error occurs it comes into the catch block
}
}
4 Réponses :
Parfois, j'ai trouvé Firebug de causer ce comportement. Essayez de désactiver son script em> panneau , si vous l'avez installé. p>
Explication: Dans certains cas, Firebug ne peut pas obtenir les sources de script pour l'affichage dans son panneau de script. Dans ces cas, il initie une deuxième demande de les obtenir. Voir Numéro 7401 pour une discussion à ce sujet, qui atténue le problème et est fixé avec Firebug 2.0.2. P>
Cela a été une vitre sérieuse dans les joues du cul :( aussi, faites attention à Yslow en faisant la même chose si elle est définie sur l'auto-exécution évidemment!
OMG. J'ai passé une demi-heure à essayer de comprendre cela. Ensuite, j'ai décidé de rechercher Stackoverflow. Merci!
Merci, n'aurait pas pensé à désactiver Firebug.
Si vous souhaitez garder Firebug activé, vous pouvez essayer de retourner une vue au lieu de rediriger pendant le mode de débogage: #if (débogage) Vue de retour ("Newaction"); #elle retour RedirectToaction ("NewAction", Nouveau {id = ViewModel.ID}); #fin si
Vient de remarquer que le chrome 18.0.1025.168 le fait aussi ... avec ou sans outils de développeur ouverts
Trois ans plus tard et j'ai pris le même problème. Déchiré ce que les petits cheveux que je sors pendant quelques heures jusqu'à ce que j'ai trouvé cette réponse!
Voici une liste de contrôle de base (copiée de ici ): p>
Vérifiez que vous n'avez aucune image ou un autre élément dans la vue avec un
vide Vérifiez que vous n'avez pas de Vous avez oublié de retourner Parfois Firebug et Yslow [Firefox (FF) Plugins] Peut causer de tels problèmes. Juste temporairement les désactiver dans FF ou tester avec un navigateur différent. P> li>
Faites attention aux filtres en double décorant votre contrôleur ou votre action. (c'était mon problème) p> li>
ol> src code> attribut ( code> par exemple) ou avoir
src code>
attribut référençant quelque chose qui n'existe plus. Tu ferais mieux
Vérifiez directement dans la "source de la page" du navigateur, que dans la vue elle-même en raison de la
Possibilité de problèmes "dynamiques" lorsque la vue est rendue. Une fois que vous
Trouvez un tel élément vide dans la page HTML CODE> SOURCE SON STI HALLITAIRE À
Trouvez le même élément à votre avis et corrigez le problème. Cela peut également se produire avec code>. P> li>
AJAX code> Appels référençant un URL code> vide code> (navigateurs interprétera une URL vide code> comme le Page actuelle et demandera à nouveau la page actuelle en faisant à nouveau le contrôleur code> Action Exécutez peu de fois). P> LI>
"FALSE" code> à partir de JavaScript code> Cliquez sur le gestionnaire d'événements pour un lien ou un bouton qui fait un AJAX code> appel . Si vous oubliez de "renvoyer false" code>, le navigateur interprète simplement l'action par défaut du lien - régulier, non ajax code>, appelant à nouveau la même page) p> < / li>
J'ai vu ce comportement. J'ai eu une grille avec l'attribut IMG SRC, étant définie sur # et le contrôleur obtenait pour chaque image. Encore une fois cette chose ne se produit que dans FF. Quel navigateur de succion. Je suis à nouveau cette question. Gratter ma tête pour trouver la ligne dans 1200 lignes ...
Merci Leniel MacAferi, j'ai passé beaucoup de temps à comprendre que mon cas était .
Cela a fonctionné après avoir supprimé le
# 1 pour moi. Sous un
Pour moi, le problème était img avec src = "#", en supprimant cet attribut résolu le problème.
J'ai eu un problème similaire avec une action du contrôleur qui a généré une image et je ne le voyais que avec Firefox. Il y a un bug vraiment vieux qui cause cela, que je suppose est toujours là. P>
https://bugzilla.mozilla.org/show_bug.cgi?id=304574 < / a> p>
Une autre solution pour cette affaire .. p>
J'avais le même problème, en cours d'exécution et de tester de chrome fort>. Je ne pouvais pas le déboguer car le deuxième appel venait de (appel externe). Je l'ai testé au hasard dans Quelle que soit la méchante c'était, j'ai Cache chromé supprimé forte> (tout !!!) et le problème a été résolu. P>
J'espère que cela aidera certains d'entre vous :) p>
Vous devriez corriger votre nom de nommage - contrôleur! = Action. Je ne peux pas encore modifier votre poste. : /
Vous n'avez pas besoin de 2 actions d'index, s'ils diffèrent par 1 paramètre nullable.
Au lieu de passer de la formulaire, essayez de reliure: «Action publique Save (produit de produit) {...}".
Je n'ai pas compris ce que vous vouliez dire contrôleur! = Action? Où est-ce que je vais mal ..Can vous s'il vous plaît commenter
Produit - contrôleur; Index - action du contrôleur; Index.aspx - Voir. Cela me semble incorrect: "Renvoyer l'index (NULL); // Ce contrôleur a été appelé intialement".
Quoi qu'il en soit, je ne trouve aucune raison pour que cette action soit appelée deux fois. Je suis aveugle / muet ou une autre information devrait être fournie.
Vous devez afficher le formulaire HTML qui publie cette action de contrôleur (sauvegarde). Cela pourrait nous montrer pourquoi il s'agit de poster deux fois.
Utilisez-vous un conteneur de COI? Si tel est le cas, vérifiez simplement la durée de vie par défaut de votre contrôleur.
J'ai changé mon code conformément aux commentaires et je n'ai qu'une action d'index et une action d'index avec le verbe post-verbe, mais l'index avec post-verbe est appelé deux fois.no iocs utilisé
Vous devez toujours nous montrer le formulaire HTML qui publie cette action indexée. Il pourrait y avoir une erreur là-bas qui le rend postal deux fois.