![]() |
ASP.NET und OOP ?
Hallo,
ich habe folgendes Problem: Ich habe ein kleines Testprojekt mit Delphi 2005 und ASP.NET angelegt. Besteht aus 1 aspx Seite und eine Klasse Kunde nun folgender Code:
Code:
Also 2 Buttons auf dem Webform und ein Label.
public class WebForm1 : System.Web.UI.Page
{ protected System.Web.UI.WebControls.Button button1; protected System.Web.UI.WebControls.Button button2; protected System.Web.UI.WebControls.Label label1; private Kunde k1; private void Page_Load(object sender, System.EventArgs e) { // Hier Code zum Initialisieren der Seite einfügen } #region Vom Web-Formular-Designer erzeugter Code override protected void OnInit(EventArgs e) { // // CODEGEN: Dieser Aufruf ist für den ASP.NET-Webformular-Designer erforderlich. /// <summary> InitializeComponent(); base.OnInit(e); } /// <summary> /// Erforderliche Methode zur Unterstützung des Designers - /// ändern Sie die Methode nicht mit dem Quelltext-Editor /// </summary> private void InitializeComponent() { this.button1.Click += new System.EventHandler(this.button1_Click); this.button2.Click += new System.EventHandler(this.button2_Click); this.Load += new System.EventHandler(this.Page_Load); } #endregion private void button1_Click(object sender, System.EventArgs e) { k1 = new Kunde(); k1.name = "Kurt"; } private void button2_Click(object sender, System.EventArgs e) { label1.Text = k1.name; } Es wird bei Button1 Klick ein neues Kundenobjekt erzeugt und Kurt zugewiesen. Beim Button2 klick bekomme ich allerdings die Fehlermeldung: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt ???? Was mache ich falsch bzw. wie muss ich es machen damit das funktioniert? Bei einem Windows Form funktioniert das! Danke im Voraus. Gruß Christof |
Re: ASP.NET und OOP ?
Ein Windowsform bleibt aber auch am Leben. Bei einem WebForm bekommst du mit jedem Aufruf eine neue Instanz. ;)
|
Re: ASP.NET und OOP ?
Aha mal wieder was gelernt,
aber wie kann ich das Problem dann lösen? Gruß Christof |
Re: ASP.NET und OOP ?
Über den ViewState zum Beispiel.
Dabei werden diese Infos verschlüsselt als Hidden fields übergeben und wieder ausgelesen. Das setzt natürlich voraus, dass die Klasse als Serializable delariert ist. ;)
Code:
Deinem WebForm kannst du diese property verpassen.
//
[Serializable] public class Kunde { string name; public string Name { get { return name; } set { name = value; } } public Kunde(string name) { this.name = name; } }
Code:
Greifst du oft auf den Wert zu kannst du ihn in jedem PostBack in eine richtige Instanz ablegen:
//
public Kunde Kunde { get { return (Kunde) ViewState["Kunde"]; } set { ViewState.Add("Kunde", value); } }
Code:
//
Kunde kunde; void Page_Load(object sender, EventArgs e) { kunde = (Kunde) ViewState["Kunde"]; } public Kunde Kunde { get { return kunde; } set { kunde = value; ViewState.Add("Kunde", kunde); } } void Button1_Click(object sender, EventArgs e) { Kunde = new Kunde("Kurt"); } void Button2_Click(object sender, EventArgs e) { if (Kunde != null) { Label1.Text = Kunde.Name; } else { Label1.Text = "nüscht"; } } |
Re: ASP.NET und OOP ?
Zitat:
Extrem coole Lösung, vielen thx du bist ein Gott :thumb: Was sind denn die Bedigungen für Serializable in .NET? Aber was mache ich wenn die Klasse nicht Serializable ist bzw. nicht gemacht werden kann? Gruß Christof |
Re: ASP.NET und OOP ?
Zitat:
Willst du aber zum Beispiel irgendwann "Kunde" zu einem Xml serialisieren, musst du einen parameterlosen Konstruktor haben. Willst du ein Paar Properties nicht serialisieren -> einfach mit einem [NonSerialized] versehen. ;) Nachtrag: me... Generell gibt es kaum Einschränkungen... Das muss ich etwas genauer ausdrücken... Serialisation hat kaum Einschränkungen, der ViewState schon! Du solltest dort wirklich nur kleine Datenmengen reinpacken. Schließlich wird er ja immer hin- und hergeschickt. ;) |
Re: ASP.NET und OOP ?
Vielen Dank!
Das ist sehr gut aus, dann werde ich es mal so mit meinem umfangreicheren Projekt probieren. Gruß Christof |
Re: ASP.NET und OOP ?
Du könntest dein Objekt auch in der Session ablegen. Also Session['kunde'] statt ViewState['kunde'], dann muss es auch nicht serialisiert werden.
|
Re: ASP.NET und OOP ?
Hat funktioniert danke.
Habe es mit der Session realisiert. Gruß Christof |
Re: ASP.NET und OOP ?
Wer in Kassel war kontne es dort direkt life sehen.
Was im ViewState sitzt ist "kompatibel" mit vor/zurück im Browser. Die Session variablen halt für die ganze Session. btw: Ich wählte den ViewState als Beispiel, weil er einem relativen .Net Newbie (sind wir nicht alle .Net NewBies? :zwinker: ) gleich noch serializing aufzwingt und dadurch vertrauter macht. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz