Ich habe eine Webseite, auf der Benutzer Kundendaten eingeben müssen. Sie können von 0 bis unendlich viele Kontakte eingeben.
Ich habe diesen Seitencode auf der Seite erstellt:
%Vor%In meinem Code hinter habe ich folgendes hinzugefügt:
%Vor%Dieser Code funktioniert nicht, da ViewState nicht alle Steuerdaten speichern kann. Ich kann mir jedoch keine andere Möglichkeit vorstellen, die Steuerelemente zu speichern, die bereits hinzugefügt wurden.
Der Viewstatus des asp:PlaceHolder
-Steuerelements speichert nichts, und ich brauche die Steuerelemente, um gespeichert zu werden, so dass, wenn ein Benutzer einige Daten in das erste Steuerelement eingibt, dass die Daten nicht verloren gehen, wenn sie ein zweites hinzufügen und so weiter.
Anstatt das gesamte Steuerelement zu speichern, speichern Sie einfach die zugrunde liegenden Daten in der Sitzung und erstellen Sie das Steuerelement aus diesen Daten jedes Mal neu, wenn Sie die Seite erneut laden.
Es wäre besser, die Anzahl der Steuerelemente im Viewstate zu speichern, um sie stattdessen hinzuzufügen ... Und dann fügen Sie sie in Page Init oder PreInit ... hinzu. ViewState würde dann für jedes der dynamischen Steuerelemente beibehalten. Dies wäre natürlich Postbacks nach dem Button-Klick.
HTH.
Speichern Sie die Anzahl der Steuerelemente, die der Benutzer im Ansichtszustand eingegeben hat. Überschreiben Sie die LoadViewState-Seitenmethode und fügen Sie die Anzahl der Steuerelemente dort hinzu. Das Framework wird dafür sorgen, dass die geposteten Daten für Sie in die Controls geladen werden. Sie werden keine Informationen verlieren. Sie müssen nur sicherstellen, dass Sie die Steuerelemente hinzufügen, BEVOR der Anzeigestatus wiederhergestellt wird.
Ich denke, dass Sie sich nicht auf einen temporären Speicher verlassen sollten - Viewstate, Session oder sonst.
Sie scheinen Ihren .ascx zu verwenden, als ob ich normalerweise eine Klasse benutzen würde ... Die Benutzerkontrolle wird jedoch größer, denke ich, da sie viel HTML enthält (?).
Wie auch immer, eine generische Liste einer Klasse wäre ... mindestens kleiner.
Aber ansonsten ist mein liebster Ansatz, einfach jeden Datensatz in eine Datenbank einzufügen, wenn es fertig ist (eins nach dem anderen) - zumindest für manuelle Eingaben. Das ist mein Eindruck von dem, mit dem Sie arbeiten. Zum Beispiel mit einer Listenansicht, Detailsview, Gridview, etc.