2008-08-21 4 views
4

J'ai une application ASP.NET 1.1, et j'essaie de comprendre pourquoi quand je change une ComboBox dont la valeur est utilisée pour en remplir une autre (relation parent-enfant), deux publications sont produites.Problème de double publication

J'ai vérifié et vérifié le code, et je ne peux pas trouver la cause.

Voici les deux piles d'appels qui se terminent par un page_load

Première postback (générée par Teh de autopostback de ComboBox)

Postback call stack http://www.juanformoso.com.ar/images/callstack1.jpg

Second postback (ce que je veux trouver pourquoi ça se passe)

alt text http://www.juanformoso.com.ar/images/callstack2.jpg

Toute suggestion? Que puis-je vérifier?

+2

Si vous retélécharger vos images :) – Neysor

Répondre

3

Il est un problème très spécifique avec ce code, je doute qu'il sera utile pour quelqu'un d'autre, mais ici il va:

Un chèque a été ajouté à onchange de la combo avec un si, si la condition est remplie, un appel explicite à la fonction de publication a été effectué. Si le combo a été réglé sur AutoPostback, asp.net ajouté l'appel postback à nouveau, produisant les deux postbacks ...

le code HTML généré est comme ceci:

[select onchange="javascript: if (CustomFunction()){__doPostBack('name','')}; __doPostBack('name','')"] 
0

La première chose que je rechercherais, c'est que la propriété AutoPostBack de la deuxième zone de liste déroulante n'est pas définie sur true. Si vous modifiez la valeur dans le second combo avec cette propriété définie sur true, je crois qu'il générera une publication sur ce contrôle.

0

Avez-vous du code à partager? Le double post m'a énormément ennuyé en ASP classique dans la journée, ce qui m'a finalement incité à passer à .NET une fois pour toutes. Chaque fois que j'ai des problèmes comme ceux-ci pour .NET, je vais à chaque contrôle et chaque élément de la PAGE comme load, init, prerender, click, SelectedIndexChanged, et ainsi de suite et mettre un point d'arrêt.

Même si je n'ai pas de code là, je vais insérer quelque chose comme:

Dim i As Integer 
i = 0 

Je suis généralement en mesure d'identifier une action que je ne m'y attendais pas et corriger au besoin. Je vous suggère de le faire ici.

Bonne chance.

0

Cochez Request.Form ["__ EVENTTARGET"] pour rechercher le contrôle à l'origine de la publication, ce qui peut vous aider à le réduire.

En regardant les callstacks, et certains Reflectoring (dans ASP.NET 2 - je n'ai pas 1.1 à portée de main) - il semble que SessionStateModule.PollLockedSessionCallback fait partie des routines de démarrage HttpApplication. Il est possible que votre application soit recyclée. Je suis certain qu'un événement est écrit dans le journal des événements pour cela. Ma seule autre suggestion serait Fiddler ou quelque chose sur le client pour capturer le trafic HTTP.

0

Ceci est très ancien poste, mais les gens continuent de chercher des solutions exactement comme je l'ai fait la semaine dernière.Comme Grengby, les événements doubles sont les principales raisons - mais la suppression de l'un d'entre eux n'est pas toujours une option. Atleast sur mon cas et j'ai dû résoudre ce problème sur la demande de la 3ème partie.

I ajouté le script suivant et modifié sous forme ASP sur masterpage:

<script>var Q = 0;</script> 
<form id="Form1" runat="server" onsubmit="Q++; if(Q==1){return true;} else { return false;}"> 

Cela semble fonctionner et s'il vous plaît faire parvenir vos commentaires.

Arun

http://www.velocityreviews.com/forums/t117900-asp-net-multiple-postback-issue.html

Questions connexes