jQuery Dialog-Postback, aber UpdatePanel wird nicht aktualisiert

8

Ich möchte ein jQuery UI-Dialogfeld von Codebehind anzeigen und es nach Postbacks aktualisieren.

Der Dialog ist ein Steuerelement zum Filtern und Suchen von Daten. So wählt der Benutzer aus DropDownLists aus und gibt Text in TextBoxes ein, klickt auf einen "Apply-Button", ein asynchrones Postback passiert, die Daten werden entsprechend der Benutzerauswahl gefiltert und das Ergebnis wird in einer GridView angezeigt. Daher muss ich das UpdatePanel um die GridView aktualisieren.

Das asynchrone Postback funktioniert mit Hilfe dieser Links:

(Im Grunde die dlg.parent().appendTo(jQuery("form:first")); -Lösung)

Problem : Ich kann das UpdatePanel weder mit UpdateMode="Immer" noch manuell von Codebehind über UpdatePanel.Update () aktualisieren. Ich nehme an, dass es etwas damit zu tun hat, dass der Dialog nicht im UpdatePanel oder ähnlichem ist. Hoffentlich kann mir jemand weiterhelfen.

Einige Quelle:

%Vor%

Es wird von Codebehind aufgerufen, wenn BtnShowDialog (außerhalb des jQuery-Dialogs) über

angeklickt wird %Vor%

Update : Ich habe auch ein Problem in den Postback-Werten festgestellt. Alle TextBoxen, wenn sie leer sind oder nicht, haben ein angehängtes Komma. Dies weist darauf hin, dass Steuerelemente mehrfach gemäß Ссылка

gerendert werden

Ich bin sicher, dass beide Probleme zusammenhängen. Der gesamte Dialog mit all seinen Steuerelementen wird in jedem asynchronen Postback neu erstellt, daher existieren alle Steuernamen mehrmals im DOM (was das Problem "ViewState comma-attending" verursacht). Die Steuerelemente sind nur in der FireBug / IE Developer Toolbar und nicht in HTML-Source sichtbar, daher nehme ich an, dass jQuery diese Probleme verursacht. Wie kann ich dispose den Dialog oder wie kann ich die Wiederherstellung verhindern (überprüfen, ob bereits vorhanden) des Dialogs? Liegt dies daran, dass sich der Dialog in einem UpdatePanel befindet oder weil er (über Javascript) außerhalb des UpdatePanels verschoben wurde?

Das Zerstören des Dialogs vor dem asynchronen Postback löst das Problem nicht, weil der Dialog einfach verschwindet:

%Vor%

Ihre Hilfe wird sehr geschätzt.

Lösung : Ich beendete die Verwendung des ModalPopupExtender aus dem AjaxControlToolkit. Nach ein paar kleinen Problemen funktioniert es wie ein Zauber mit asynchronen Postbacks (vergiss nicht, MPE.Show() in jeder Code-Behind-Funktion aufzurufen, wenn das Popup sichtbar bleiben soll). Ich könnte mehr Code hinzufügen, wenn jemand interessiert ist.

    
Tim Schmelter 14.04.2011, 11:04
quelle

4 Antworten

5
  

Ich nehme an, dass es etwas zu tun hat   mit dem Dialog nicht innerhalb von   das UpdatePanel oder etwas ähnliches.

     

Ich habe auch ein Problem in der   Postback-Werte. Alle TextBoxen wenn   leer oder kein angehängtes Komma.

Sie sind tatsächlich in beiden Punkten richtig. Der Kern des Problems ist, dass der Script Manager "denkt", dass er ein Element aktualisieren soll, das jQuery tatsächlich an einen anderen Ort auf der Seite verschoben hat, was zu mehreren Kopien des Elements und der von Ihnen erwähnten Probleme führt. p>

Ich habe dieses Problem mit verschachtelten UpdatePanels gesehen, aber es kann auch in anderen Szenarien auftreten.

Dies ist ein Problem, für das die Problemumgehungen unordentlich sind.

Option 1 - Ändern Sie den Quellcode für jQuery UI. Ich hatte kein Glück mit einer schnellen Lösung. Kurz vor dem Neuschreiben des gesamten Plugins konnte ich den Dialog nicht einfach finden, ohne das DOM neu zu ordnen. Mit dieser Route "besitzen" Sie jetzt auch den Quellcode, weil Sie ihn geändert haben.

Option 2 - Passen Sie das DOM immer an, wenn die Seite teilweise gerendert wird, um die doppelten Elemente zu entfernen. Sie können ein zusätzliches Skript ausgeben, um das falsche Duplikatelement zu bereinigen. Ich mag diesen Ansatz nicht, weil er dem DOM erlaubt, sich in einem ungültigen Zustand zu befinden, bis das Skript ausgeführt wird.

Option 3 - Überschreiben Sie manuell das Rendering des UpdatePanels. Code sieht ungefähr so ​​aus:

%Vor%

Dadurch wird auch die Ereignisüberprüfung verwechselt, weil die Client- und Serverversionen der Seite nicht übereinstimmen (oder zumindest ASP.Net kann das nicht erkennen). Die einzige Möglichkeit, diese Arbeit zu erledigen, war, die Ereignisvalidierung auszuschalten.

Mit einem geeigneten Sicherheitsmodell ist die Ereignisvalidierung nicht 100% notwendig, aber ich möchte nicht, dass ich sie ausschalten muss.

Zusammenfassend ist dies der böseste Code, den ich über SO geschrieben habe, und flauschige weiße Kätzchen werden sterben, wenn man sie benutzt, aber der Ansatz scheint zu funktionieren.

Hoffe, das hilft.

    
Tim Medora 15.04.2011 15:03
quelle
4

Hier habe ich das gleiche Problem gelöst. Es entfernt alle alten Dialoge und fügt das neu aktualisierte Formular dem Formular hinzu, damit die Postbacks funktionieren. Ich gebe den folgenden Code in einen Skriptblock ein, der über ScriptManager.RegisterStartupScript im Code hinter der Seite hinzugefügt wird.

%Vor%     
Jon 07.09.2012 18:44
quelle
1

Ich bin mir nicht sicher, aber das ist wahrscheinlich richtig und ans bz seine Arbeit formte mich, als ich

benutzte %Vor%

versuchen Sie das?

%Vor%     
asharajay 14.04.2011 11:14
quelle
1

Ich denke, Jquery und Skript-Manager / Update-Panel beim Generieren und Parsen von Skript erstellt confilct es, und Sie sollten Ereignis in Trigger des Update-Panel richtig behandeln, um diese in Code hinter Methode zu verwenden:

%Vor%

Ich habe dieses Problem und kann es durch den folgenden Code lösen (es ist mein Beispielcode):

%Vor%

und in c # -Code:       protected void BtnUpMove_Click (Objektabsender, EventArgs e)         {             int SelectedIndex = lstSLA.SelectedIndex;

%Vor%     
Ali 07.07.2013 05:10
quelle