2009-03-11 11 views
0

Der Titel versucht, das Problem zusammenzufassen, aber hier ist eine detailliertere Zusammenfassung: unsere Webseite ist eine Sammlung von Benutzersteuerelementen, die visuell als rechteckige Reporting-Widgets, welche in AJAX updatepanels eingestellt sind. Wir geben dem Benutzer die Möglichkeit, die Widgets per Drag-and-drop auf die voreingestellten "Zonen" auf der Seite zu setzen.ASP.Net, Drag-n-Drop, Postbacks und Steuerelement-IDs

Die Drag & Drop-Funktion funktioniert einwandfrei. Wir verwenden AJAX-Aufrufe an einen Webdienst, um eine Datenbank mit den neuen Einstellungen des Benutzers für die Persistenz zu aktualisieren.

Das "aber" passiert, wenn wir ein Postback von einem dieser Widgets machen. Das Postback wird an den Server gesendet, es rendert ein Update, das an den Client zurückgesendet wird (alles über AJAX, wegen des updatepanels). Wir erhalten dann eine Meldung "Konnte UpdatePanel mit ID nicht finden ..." auf dem Client, da die Dokumenthierarchie geändert wurde, aber die Steuerelement-IDs auf dem Client nicht aktualisiert wurden.

Wir versuchten Rick Strahls Lösung zu diesem link text, mit dem wir statische Kontroll-IDs auf dem Client erstellen konnten. Das bricht die Postback-Funktionalität, obwohl ... die IsPostBack-Eigenschaft nicht festgelegt ist, nehme ich an, da der Server die Steuerelement-ID nicht mit einem bekannten Hierarchieelement übereinstimmen kann.

Wir denken darüber nach möglicherweise die Steuerelement-ID auf der Client-Seite zurückgesetzt, nachdem es per Drag & Drop, mit Javascript. Offensichtlich würde dies eine Duplizierung des Benennungsalgorithmus von .Net erfordern - nicht klug, denken wir. Vielleicht können wir ein separates Updatepanel verwenden und den Server bitten, uns die neue Control-ID zu senden, nachdem sie gelöscht wurde?

Offensichtlich gehen uns die Ideen aus.

Ich realisiere, dass dies wahrscheinlich zu lang ist, und ich werde gerne bearbeiten, Code-Beispiele, etc. zur Verfügung stellen, um Ihnen zu helfen, uns zu helfen. Vielen Dank im Voraus.

Antwort

0

Nur aus Interesse hilft Haben Sie die ID des UpdatePanels überprüft, das zurücksendet, und ist die ID, die erwartet wird? Sie können wie so in die client page lifecycle von ASP.NET AJAX haken Sie die ID des Steuer Initiieren der Postbacks

<script type="text/javascript"> 

    function pageLoad(sender, args) 
    { 
     var prm = Sys.WebForms.PageRequestManager.getInstance(); 

     prm.add_initializeRequest(InitializeRequest); 
     prm.add_endRequest(EndRequest); 

     //fires when an async postback is initialized 
     function InitializeRequest(sender, args) 
     { 
     alert(args._postBackElement.id) 
     } 

     //fires when an async postback is complete 
     function EndRequest(sender, args) 
     { 
     alert(sender._postBackSettings.sourceElement.id) 
     } 
    } 

</script> 
+0

Danke für die Idee, Russ. Wir konnten diese Ereignisse nicht auslösen. Umgeht AJAX den Handler irgendwie? – RobLinx

+0

Soweit ich weiß, werden diese Ereignisse auf der Client-Seite ausgelöst, wenn irgendeine Art von Postback initiiert wird. Das JavaScript-Objekt PageRequestManager behandelt das asynchrone Postback für den Server, das von einem UpdatePanel initiiert wird. –

+0

Ich habe meine Antwort geändert, um die Event-Handler auf Seite laden –

0

Sie könnten das integrierte System von ASp.Net für ziehbare Seitenelemente namens WebParts verwenden.

Das System arbeitet mit Postbacks und kann leicht mit Visual Studio

eine Suche nach webparts Tutorials wie implementiert werden:

http://www.ondotnet.com/pub/a/dotnet/2005/01/10/liberty.html

Hope this

+0

Dank für den Zeiger, Richard zu inspizieren! Wir haben WebParts zu Beginn kurz evaluiert und dachten, dass die Lernkurve zu steil sein könnte. Vielleicht haben wir uns verrechnet? – RobLinx

Verwandte Themen