Hallo zusammen,
wie kann ich in einem Webpart am effektivsten Daten über ein Postback hinaus halten?
Gibt es andere Möglichkeiten außer Page.Cache.Insert und Page.Cache.Get?
Vielen Dank schon mal für eine Antwort.
Rolf.
ViewState
Danke.
Gilt das auch, wenn ich nur Werte aus Textboxen und selektierte Items aus Dropdownlists speichern will?
Die brauchst Du gar nicht speichern, weil das die Controls selbst machen. Eingegebene Texte in Textboxen und die Auswahl von Selectboxen bleiben erhalten.
Es sei den die (neuen) Werte werden durch deine Programmierung wieder überschrieben z.B. Standardwerte sn der Falsche stelle gesetzt (Asp.Net Life Cycle).
Thomas
MCSD SharePoint 2013
TickX 2.2 - SharePoint 2013/2016 Ticketsystem
Hallo Thomas,
danke für den Tipp.
Gibt es irgendwo ein gutes Beispiel für ein Webpart Lifecycle, wo ich auch sehe, in welcher Methode man am besten was macht?
Im Grunde ist das relativ einfach:
erzeuge die Controls in CreateChildControls. Setze ihre Initialwerte nur, wenn es kein Postback ist ( if (!Page.IsPostBack) ). Datenbindung macht man i.d.R. in OnPreRender.
Sorry, aber wahrscheinlich stelle ich mich zu dumm an...
Beispiel:
ist jetzt ein Postback, wird das Control neu instanziiert (der Initialwert also weg), obwohl CreateChildControls doch eigentlich prüfen sollte, ob die Controls schon erzeugt sind... oder?
Rolf
Ich dachte Du hättest ein Webpart. Der Code ist aber ein UserControl.
Nimm mal die ganzen Implements weg. Die brauchst Du nicht, weil das die Basisklasse UserControl bereits für Dich erledigt.
sorry, hatte ich vergessen zu erwähnen.
ohne Implements hat sich aber auch nichts geändert.
Hier ist das Webpart, das das UserControl einbindet:
using System.Web.UI.WebControls.WebParts;
WebDisplayName("Url"), WebDescription("Text To Show")]
public string ResponseString { get { return _responseString; } set { _responseString = value; } }
D.h. die eigentliche Oberfläche wird durch das UserControl (und nicht durch das Webpart) bereitgestellt. In UserControls ist die Vorgehensweise eine ganz andere.
Dort erzuegst man die Oberfläche normalerweise über den grafischen Designer, der dann die ascx-Datei befüllt. Code dazu kommt in die CodeBehind ascx.vb-Datei. Damit werden die Controls bereits in der ascx erzeugt und im Code nur noch referenziert:
ascx; <asp:TextBox id="textBox" runat="server"/>ascx.vb: Protected textBox As TextBox
Man legt einfach eine Protected-Variable mit dem Namen an, der als id in der ascx steht und fertig.