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.
Danke für die Idee, Russ. Wir konnten diese Ereignisse nicht auslösen. Umgeht AJAX den Handler irgendwie? – RobLinx
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. –
Ich habe meine Antwort geändert, um die Event-Handler auf Seite laden –