Sonderbarer Fehler beim Kombinieren eines ASP.NET-Update-Panels mit dem jQuery UI DatePicker

8

Ich habe eine Seite erstellt, die einen Inline- jQuery UI-Datepicker kombiniert. Ich möchte einen Rückruf zu dem Updatepanel initiieren, wenn der Benutzer auf ein neues Datum klickt, um einige Daten zu aktualisieren. Nun, diese Seite hat mehrere updatepanels (nicht fragen :)), also muss ich überprüfen, welches Updatepanel das Reload durchgeführt hat, um ein paar Sachen clientseitig zu machen. Ich verwende __doPostBack , um das Postback zu machen, und Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, args) {} , auf das ich achten soll, wenn ein Update fertig ist.

Das Problem ist, dass der Callback in FF sagt, dass es keine asynchrone Operation ist, und die Daten, die ich überprüfen muss, welches updatepanel die Aktualisierung auf Null gesetzt hat.

Mein Problem ist, dass dies im IE funktioniert, aber nicht in jedem anderen Browser, was durch zwei Dinge verursacht werden kann: IE geht in einen Quirkmodus, der das Problem löst (das ist, was ich denke) oder dass IE irgendeine Art hat der nativen Unterstützung für das Updatepanel, dass andere Browser nicht.

Ich habe das Problem eingegrenzt und eine Testseite erstellt:

%Vor%

Wenn Sie diese Testseite in IE starten, erhalten Sie eine Messagebox, die anzeigt, was sie soll. Wenn Sie sie in FF oder Chrome laden, erscheint eine Meldung mit der Meldung "null":)

Ich habe alle möglichen Dinge ausprobiert, aber ich bin mir nicht sicher, was dieses Verhalten verursachen könnte, da ich nicht so tief in die inneren Abläufe von jQuery oder ASP.NET Ajax involviert bin. Wenn ich jedoch den Code in FireBug langsam genug durchführe, funktioniert es ... Was führt mich zu der Annahme, dass es ein Problem mit der Interoperabilität zwischen jQuery-Callbacks und ASP.NET Ajax-Callbacks sein könnte?

Jede Hilfe oder Ideen wird sehr geschätzt.

Danke.

[UPDATE] Tim hat es gelöst! Danke vielmals! - Danke auch an alle, die ihre Zeit damit verbracht haben, das herauszufinden:)

    
cwap 10.09.2009, 18:10
quelle

10 Antworten

4

Ich denke, Sie finden diesen Artikel aus MSDN interessant: Ссылка

Der Artikel besagt, dass "Sys.WebForms.PageRequestManager.getInstance (). add_pageLoaded (") auch an Updatepanel complete events angehängt wird.

  

Es wird auch jedes Mal ausgelöst   asynchroner Rückruf gestartet am   Namen eines UpdatePanel-Steuerelements   vervollständigt und der Inhalt darin   UpdatePanel ist aktualisiert.

Dann können Sie in Ihrem Handler die aktualisierten Panels mit

durchlaufen %Vor%

Ich würde weg von der Verwendung der _ postBackSettings wegen der "_" bedeutet Privatsphäre und kann in zukünftigen Versionen von asp.net ajax unterbrochen werden.

    
Tim Santeford 18.09.2009, 05:47
quelle
1

Ich habe verschiedene asynchrone Probleme mit jQuery / Updatepanels behoben, indem ich das Argument ScriptMode="Release" im ScriptManager verwendete.

%Vor%     
Tim Santeford 17.09.2009 15:53
quelle
0

Ein häufiges Problem bei Kombinationen von AJAX und jQuery ist das ...

%Vor%

Tritt nur beim Laden der ersten Seite auf. Wenn Sie den von buildDatapicker () betroffenen HTML-Bereich ersetzen; Sie haben alle damit verknüpften Ereignisse verloren (auch wenn Sie sie durch dieselben Elemente ersetzt haben).

Alles, was Sie tun müssen, ist buildDatepicker gegen das neu geladene HTML aufzurufen ... und das geladene Element nur zu übergeben, um sicherzustellen, dass Sie nicht verdoppeln ...

%Vor%

Jetzt können Sie buildDatepicker (myNewlyLoadedElement) aufrufen; um die Datenauswahlfunktion erneut zu binden.

    
Fenton 14.09.2009 12:38
quelle
0

Sie könnten versuchen, datypicker zu verwenden, um ein altField zu setzen und das für Änderungen zu überprüfen, um ein Postback zu machen.

    
DaMayan 15.09.2009 08:53
quelle
0

Ich habe Ihren Code zur Reproduktion des Fehlers ausprobiert und kann den Fehler reproduzieren. Und ich bin zu dem Schluss gekommen, dass es ein Problem mit jQuery / UpdatePanels gibt.

Wenn ich die Schaltfläche mit einem LinkButton ersetze, können Sie sehen, dass die Verbindung direkt __doPostBack (...) aufruft, genau die gleiche Funktion mit exakt denselben Argumenten, die Sie aufrufen. Und das Klicken auf den Link-Button funktioniert direkt, aber das Klicken auf ein Datum funktioniert nicht.

Das bedeutet also, dass in jQuery etwas passiert, das den Kontext ändert. Aber ich habe keine Ahnung, was das wäre.

    
Pete 15.09.2009 16:09
quelle
0

Ich habe vor einiger Zeit ein anderes Skript gefunden, das ich seit einiger Zeit benutze und noch nie Probleme hatte.

%Vor%

Sie können eine Callback-Funktion immer noch genau so einstellen wie in Ihrem obigen Skript.

Sie müssen möglicherweise auch manuell einen Scriptresource-Handler hinzufügen (ich kann mich nicht erinnern, welcher), aber ich erinnere mich besonders daran, Probleme beim Aufruf von asynchronen und nicht-asynchronen Postbacks zu haben. Hoffe das hilft.

    
AndrewM 16.09.2009 20:07
quelle
0

Sieht wie eine Wettlaufbedingung aus, versuchen Sie UpdateMode="Conditional" und ChildrenAsTriggers="false", Referenz .

    
slf 17.09.2009 16:49
quelle
0
  

Allerdings, wenn ich den Code hinein gehe   FireBug langsam genug funktioniert es

Oh? Warum nicht eine Sekunde geben, um es auszuarbeiten?

%Vor%     
lod3n 17.09.2009 23:20
quelle
0

Ich mochte Tims Antwort, die die Idee umgab, dass Sie args.get_PanelsUpdated () im pageLoaded-Event verwenden sollten. Es scheint das geeignete Mittel zu sein, um das zu tun, was Sie versuchen zu tun. Probieren Sie es aus - wenn es nicht funktioniert, dann habe ich eine andere Idee im Ärmel (obwohl es irgendwie schmutzig ist).

    
Skone 18.09.2009 19:46
quelle
0

Ich dachte, das wäre interessant, wenn Sie nach doPostBack eine Warnung hinzufügen, gibt FF nicht null zurück.

%Vor%     
Noah 18.09.2009 22:43
quelle

Tags und Links