PostBack beiClientseitigen Änderungen

Hallo an alle .net geschädigten

Ich baue gerade einen kleinen Editor, der in einer Tabelle Inhalte entgegennimmt. Die einzelnen Zeilen in der Tabelle können auf dem Client sortiert werden (Up- und Down Knöpfe je Zeile) und die geänderte Reihenfolge kommt in eine Textbox. Das läuft auch alles und die Daten kommen auch zurück aber:
Löse ich per auf der Seite befindlichem „RefreshButton“ ein Postback aus, sind die Daten noch alt. Löse ich ein zweites PostBack mit dem Button aus wird die Tabelle wie gewünscht umsortiert. Aber wer will schon zweimal klicken! Der Code für „this.load“ sieht so aus:

private void Page_Load(object sender, System.EventArgs e)
{
if(!this.IsPostBack)
{
xmlGridAdd();//xmlTable erzeugen
Session[„xmlTable“] = xmlTable;//und in ein Session Objekt parken
}
else
{
Table hashXmlTable = (Table) Session[„xmlTable“];//beim Postback die Tabelle umkopieren
int lines = hashXmlTable.Rows.Count;
for (int i = 0; i

Hallo Dirk,

Simuliertes Stateful Verhalten eines eigentlich statuslosen Protokolls ist die Ursache - oder kürzer: der Viewstate in ASP.NET.

Im Load Event hast Du die aktuellen Werte der Controls noch nicht. Erst in den Eventhandlern sind die aktuellen Werte der Controls verfügbar.

Im Viewstate werden die Werte aller Controls auf der Seite gespeichert.
Der Ablauf ist (stark vereinfacht) in etwa so:

Server, Erster Aufruf: Load Event - Alle anderen Eventhandler - Viewstate befüllen & Rendern - Seite inkl. Viewstate Senden

Client: Benutzer gibt Daten ein

Server: Load Event (Werte aus dem letzten Viewstate verfügbar) - Alle anderen Eventhandler (mit Werten die der Benutzer eingegeben hat) - Viewstate neu befüllen & Rendern - Senden

Client: Benutzer gibt Daten ein

Nächster Aufruf: Werte vom letzten Viewstate im Load Event … usw.

Also kurz : Im Click-Event des Buttons solltest Du die Werte haben.

lg
M:\>

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo

Vielen Dank für die schnelle Antwort, alleine ich begreife es wohl nicht (zumindest nicht ganz).

Ich bin mir nicht sicher was du meinst: Im Click Event, der den Refresh auslösen soll, steht folgendes:

private void extroTextButtonRefresh_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
Session[„xmlTable“] = xmlTable;
}

Der soll also das Session Objekt „laden“. das bei !PostBack ausgelesen wird. Das funzt nicht. Muß ich beim !postback den Event extra auslösen oder auslesen.
Wie du Schreibst

Also kurz : Im Click-Event des Buttons solltest Du die Werte
haben.

Kann ich die auslesen? Wenn ja: Wie denn, ist das ein Control im Event oder was?

Entschuldige, aber das mit dem PostBack habe ich trotz deiner präzisen Antwort wohl nicht begriffen. :wink:

mfg

Dirk

Hi,

Der Click-Event Handler wird erst NACH dem Load Event Handler abgearbeitet - versuch’ mal auf beide functions einen Breakpoint zu setzen und schau nach welche zuerst kommt. Zu dem Zeitpunkt wo Du das Session Element schreibst (im Click), ist der Load Event schon fertig abgearbeitet.

Du mußt die Logik vom !postback-else Zweig in den Click Event verschieben, dann sollte es funktionieren.

lg
M:\>

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

1 Like

Hi, Morrighan,

mochmals vielen Dank für die Antwort(en). Begriffen habe ich den Ablauf noch nicht )-;, aber ich habe es hingekriegt und das ist die Hauptsache. Ich glaube, ich muß da mal ein Ablaufschema malen …

Vielen Dank für die Hilfe!

mfg
Dirk