Frage

Ich habe eine ASP.NET 1.1-Anwendung und versuche herauszufinden, warum zwei Postbacks erzeugt werden, wenn ich eine ComboBox ändere, deren Wert zum Füllen einer anderen ComboBox verwendet wird (Eltern-Kind-Beziehung).

Ich habe den Code überprüft und überprüft und kann die Ursache nicht finden.

Hier sind beide Aufrufstapel, die mit einem page_load enden

Erstes Postback (generiert durch das Autopostback der ComboBox)

Postback-Aufrufstapel http://www.juanformoso.com.ar/images/callstack1.jpg

Zweiter Postback (das ist es, was ich herausfinden möchte, warum es passiert)

Alternativtext http://www.juanformoso.com.ar/images/callstack2.jpg

Irgendein Vorschlag?Was kann ich überprüfen?

War es hilfreich?

Lösung

Es handelt sich um ein sehr spezifisches Problem mit diesem Code. Ich bezweifle, dass er für jemand anderen nützlich sein wird, aber hier ist es:

Den Combos wurde ein Häkchen hinzugefügt onchange mit einem if, wenn die Bedingung erfüllt war, wurde ein expliziter Aufruf der Postback-Funktion durchgeführt.Wenn die Kombination auf eingestellt war AutoPostback, asp.net hat den Postback-Aufruf erneut hinzugefügt und die beiden Postbacks erzeugt ...

Der generierte HTML-Code sah folgendermaßen aus:

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

Andere Tipps

Als Erstes würde ich darauf achten, dass die AutoPostBack-Eigenschaft der zweiten ComboBox nicht auf „true“ gesetzt ist.Wenn Sie den Wert in der zweiten Kombination ändern, während diese Eigenschaft auf „true“ gesetzt ist, wird meiner Meinung nach ein Postback für dieses Steuerelement generiert.

Haben Sie einen Code, den Sie teilen könnten?Doppelte Post-Backs haben mich damals im klassischen ASP so sehr geplagt, dass sie mich schließlich dazu veranlassten, ein für alle Mal auf .NET umzusteigen.Immer wenn ich Probleme wie diese für .NET habe, gehe ich zu jedem CONTROL- und jedem PAGE-Element wie Load, Init, Prerender, Click, SelectedIndexChanged und dergleichen und setze einen Haltepunkt.

Auch wenn ich dort keinen Code habe, füge ich etwas ein wie:

Dim i As Integer
i = 0

Normalerweise kann ich eine Aktion, mit der ich nicht gerechnet habe, lokalisieren und bei Bedarf beheben.Ich würde vorschlagen, dass Sie das hier tun.

Viel Glück.

Überprüfen Sie Request.Form["__EVENTTARGET"], um das Steuerelement zu finden, das das Postback initiiert – das kann Ihnen helfen, es einzugrenzen.

Wenn man sich die Callstacks und etwas Reflectoring ansieht (in ASP.NET 2 – ich habe 1.1 nicht zur Hand) – sieht es so aus, als ob SessionStateModule.PollLockedSessionCallback Teil der HttpApplication-Startroutinen ist.Möglicherweise wird Ihre App recycelt. Ich bin mir ziemlich sicher, dass dafür ein Ereignis in das Ereignisprotokoll geschrieben wird.

Mein einziger anderer Vorschlag wäre Fiddler oder etwas auf dem Client, um den HTTP-Verkehr zu erfassen.

Dies ist ein sehr alter Beitrag, aber die Leute suchen immer noch nach einer Lösung, genauso wie ich es letzte Woche getan habe.

Wie Grengby sagte, sind doppelte Ereignisse die Hauptgründe – aber die Beseitigung eines davon ist nicht immer eine Option.Zumindest in meinem Fall, und ich musste das Problem auf Antrag eines Dritten lösen.

Ich habe das folgende Skript hinzugefügt und das ASP-Formular auf der Masterseite geändert:

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

Das scheint zu funktionieren. Bitte leiten Sie Ihre Kommentare weiter.

Arun

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top