Entwickler-Ecke
ASP.NET und Web - Dynamische Contentseiten laden über UserControl
bayerleo - Mi 31.08.05 11:26
Titel: Dynamische Contentseiten laden über UserControl
Hallo,
habe ein Problem was meiner Meinung nach jeden Tag 10000x in Deutschland auftritt, und demnach einfach zu lösen sein MUSS !
Habe drei Seiten,
- meine ASPX Webseite
WebForm1, die zwei UserControls beinhaltet,
- links das UserControl
phMenuLeft, das eine Navigation beinhaltet,
- rechts das UserControl
phMenuMain, das beliebigen Content beinhaltet.
SO SIEHT'S AUS: http://www.delphi-forum.de/download.php?id=1297
Beim laden der ASPX Seite werden die beiden UserControls mit den entsprechenden Seiten "navigation.ascx" und "content.ascx" on page_Load geladen.
Im linken UserControl (= der Navigations"frame") klicke ich auf Button1, der dem WebForm1 sagen soll 'Lade im rechten Content"frame" eine neue Seite'. (Der Einfachheit halber, und weils eh nicht geht, sagen wir hier mal nur 'Seite das rechte UserControl einfach nur auf visible')
Ich bin zwar neu in der Thematik, aber ich glaube das ist eine gängige und völlig alltägliche Praxis eine Homepage aufzubauen oder?
Seht euch bitte mal den Code an, ich erhalte beim klicken auf den Button1 nur eine Fehlermeldung "Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt".
Es scheint als könne das UserControl nicht auf seinen "parent" zugreifen, obwohl alles public deklariert ist und WebForm1 im UserControl auch bekannt ist.
Bin um JEDE Hilfe und JEDE Anregung dankbar da ich mir seit geraumer Zeit die Zähne daran ausbeiße!
Inhalt der Seite WebForm1.aspx
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| unit WebForm1;
interface
uses System.Collections, System.ComponentModel, System.Data, System.Drawing, System.Web, System.Web.SessionState, System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls;
type TWebForm1 = class(System.Web.UI.Page) strict private procedure Page_Load(sender: System.Object; e: System.EventArgs); strict protected procedure OnInit(e: EventArgs); override; private public phMenuLeft: System.Web.UI.WebControls.PlaceHolder; phMenuMain: System.Web.UI.WebControls.PlaceHolder;
end;
implementation
procedure TWebForm1.Page_Load(sender: System.Object; e: System.EventArgs); begin phMenuLeft.Controls.Add(Page.LoadControl('Navigation.ascx')); phMenuMain.Controls.Add(Page.LoadControl('Content.ascx')); end;
end. |
Inhalt der Navigationsseite Navigation.ascx
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| unit Navigation;
interface
uses System.Data, System.Drawing, System.Web, System.Web.UI, System.Web.UI.WebControls, System.Web.UI.HtmlControls,WebForm1; type TNavigationControl1 = class(System.Web.UI.UserControl) strict private procedure Page_Load(sender: System.Object; e: System.EventArgs); strict protected Button1: System.Web.UI.WebControls.Button; Button2: System.Web.UI.WebControls.Button; procedure OnInit(e: System.EventArgs); override; private public end;
implementation procedure TNavigationControl1.Button1_Click(sender: System.Object; e: System.EventArgs); var test:TWebForm1; begin test := WebForm1.TWebForm1.Create;
test.phMenuMain.Visible:=true;
test.phMenuMain.Controls.Add(Page.LoadControl('Content_neu.ascx'));
test.phMenuMain.Visible:=false;
end;
end. |
Falls mehr Informationen benötigt werden kann ich diese gerne zur Verfügung stellen, ebenso den kompletten Source Code zum Download.
Moderiert von
Christian S.: Topic aus .NET verschoben am Sa 17.09.2005 um 22:23
Christian S. - Mi 31.08.05 11:33
Hallo!
Wenn ich das richtig sehe, erzeugst Du im letzten Code eine neue Instanz von TWebForm1, aber Du willst doch etwas an der bestehenden Instanz ändern bzw. diese etwas tun lassen, oder sehe ich das falsch? :gruebel:
Grüße
Christian
bayerleo - Mi 31.08.05 11:38
Die neue Instanz zu erzeugen war Idee eines Users im anderen Forum.
Mein Menschenverstand sagt mir eigentlich auch, das ein direkter Zugriff funktionieren sollte:
WebForm1.TWebForm1.phMenuMain.Visible := false;
Doch es geht nicht!
Moderiert von
Christian S.: b- durch Delphi-Tags ersetzt.
Christian S. - Mi 31.08.05 11:44
Hallo!
Ich habe ein wenig den Eindruck, ein paar
Grundlagen [
http://crashkurs.christian-stelzmann.de] können Dir nicht schaden, bevor Du mit solchen Sachen anfängst ;-)
Denn in Deinem letzten Code versuchst Du, auf eine Klasse so zuzugreifen, als wäre es ein Objekt! Du musst auf die bestehende Instanz zugreifen! Irgendwie werden in Deinem gesamten Quellcode nirgendwo Instanzen erzeugt.
Ist das (a) einer Kürzung zum Opfer gefallen oder (b) eine Eigenart von ASP, dass die irgendwo anders erzeugt werden oder (c) ein Fehler? (Du hast noch den Publikumsjoker und darfst jemanden anrufen. 50:50 geht bei drei Möglichkeiten nicht :D)
Grüße
Christian
bayerleo - Mi 31.08.05 12:00
Hallo,
danke für den Link, Grundlagen fehlen mir definitiv.
Ich hoffe bei diesem konkreten Problem kannst du mir trotzdem helfen, das raubt mir nämlich die gesamte Freude am 'Einstieg in die Materie' und ich möchte damit beginnen!
Ich tippe auf Antwort C, ein Fehler meinerseits. :D
Aber moment, TWebForm1 ist doch ein Objekt oder habe ich akuten Kaffeemangel?! Also müsste ich doch hiermit darauf zugreifen können?
Delphi-Quelltext
1:
| TWebForm1.phMenuMain.Visible := false; |
EDIT:
Okay, ich greife auf die Klasse zu... ich finde allerdings nicht die Stelle wo das Objekt erzeugt wird, und habe keine Ahnung wie das Objekt heisst (ausser self, was mir vom UserControl aus wenig hilft).
Christian S. - Mi 31.08.05 12:24
Ich habe bei mir gerade mal ein ASP.NET-Projekt erstellt und in dem Assembly werden anscheinend nur die Klassen zur verfügung gestellt und die Instanzen dann wohl woanders erzeugt, sobald die entsprechende Seite (und damit das Assembly) geladen wird.
Leider bin ich da mit meinem Latein am Ende, weil ich mich noch nicht mal so richtig mit den Grundlagen von ASP .NET beschäftigt habe und alles, was ich Dir jetzt noch sagen würde, wäre wahrscheinlich falsch.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!