ASP.NET MVC Action est Appelée deux fois
J'ai un contrôleur spécifique de l'action qui est appelée deux fois, ce qui en plus d'être bizarre est à l'origine des problèmes avec un singleton partie de ma demande (pas vraiment un problème, il vient de la double appel à mon attention).
Aucune idée pourquoi l'action d'un contrôleur serait exécuté à deux reprises à chaque fois?
- Un peu de code serait sympa
- Je vais poster le code de peu de temps si c'est nécessaire; je viens de pêche pour n'importe quel général "gotcha" que l'on peut offrir.
- Avoir un regard sur les demandes dirigées à partir de votre navigateur vers le serveur. Voyez-vous une ou deux demandes? Si l'une: poster le code ici, si deux: voir tvanfosson de réponse.
Vous devez vous connecter pour publier un commentaire.
Pas de retour
false
ou prévenir l'action par défaut sur l'événement dans un JavaScript gestionnaire de clic sur un lien qui fait l'appel via AJAX. Dans ce cas, il prendra aussi l'action par défaut du lien (c'est à dire, un non-AJAX post vers la même URL).Ex.
J'ai eu un problème similaire. Le problème a été causé par cette ligne dans mon _Layout.cshtml fichier:
Après la suppression de la ligne ci-dessus, mes actions sont appelé une seule fois.
Très tard, mais j'ai trouvé que le fait d'avoir
causé ce pour lui faire faire de l'appeler à nouveau. Espérons que cela aide quelqu'un, la raison pour laquelle je ne suis pas sûr.
Trouvé la solution ici.
http://skonakanchi.blogspot.com/2011/09/action-method-calling-twice-in-aspnet.html
C'est tard, mais peut-être que cela aidera quelqu'un.
Mon problème était similaire (méthode de contrôleur aurait le feu une fois sur la charge initiale, puis d'incendie de nouveau à l'instant de manière asynchrone).
J'ai été en mesure d'inspecter les HttpContext.objet de requête et a déterminé que la deuxième demande a été due à Visual Studio "Navigateur le Lien" caractéristique.
J'ai désactivé Navigateur Lien et le mystère appel ajax à ma méthode de contrôleur n'arrive plus.
Comment faire pour désactiver le Navigateur Lien
Dans mon cas précis, c'était le chargement de
jquery.unobtrusive-ajax.min.js
fichier deux fois.C'était à l'origine du
$(document).ready(function() { });
fonction pour être exécuté deux fois.Espère que cela est utile.
Je partage mon expérience au cas où il sert à quelqu'un,j'ai eu la suivante dérange
un bouton de soumission
ce qu'il appelle la fonction Javascript suivante
le problème que j'ai eu, c'est que j'ai appelé l'action deux fois à cause de la clic de la fonction
et de le soumettre dans cette ligne --> $("#frmSearch").submit();
la solution au problème était d'éviter l'événement par défaut de la fonction, cliquez avec
e.preventDefault();
de la manière suivante:
À l'aide de kendo de la grille de cette question qui s'est passé. option utiliser la grille AutoBind(faux)..
Supprimer null mesure argument de vue
à
Mon problème est que j'ai accidentellement inclus le
recaptcha/api.js
forme de fichier google deux fois. L'un dans l'BaseLayout et un dans la vue.Dans mon contrôleur, Une méthode appelle la méthode B. Il était évident qu'ils étaient en train d'être appelé deux fois. J'ai vérifié cela en écrivant à la fenêtre de sortie. Fait intéressant, il a dit:
Je me serais attendu A, B, A, B. de plus, malgré le double des appels, je n'ai reçu de retour XHR.statusText une fois. Je le sais, parce que le texte est automatiquement ajouté à une table dans le navigateur.
De toute façon, le problème lié à jquery.form.js. - Je l'utiliser pour activer AJAX téléchargement du fichier.
La documentation dit que lors de l'initialisation de la connexion de jquery.form.js à votre formulaire HTML cours de $(document).ready(), vous pouvez ajouter une option appelée "url". Si vous ne le faites pas, la valeur par défaut est l'ACTION de votre formulaire.
Je comptais sur la valeur par défaut, et d'obtenir le double des appels.
Le problème a disparu quand j'ai ajouté l'option url et supprimé de l'ACTION de la balise form.
J'ai eu un problème similaire. Le problème a été causé par cette ligne dans la vue partielle.cshtml fichier:
après le retrait, il est fixe.
Dans mon cas, j'ai juste eu à ajouter un
[HttpPost]
sur mon action et le problème a été résolu.