Laden...

Linkbutton dynamisch erzeugen

Erstellt von mich4el vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.710 Views
M
mich4el Themenstarter:in
2 Beiträge seit 2006
vor 17 Jahren
Linkbutton dynamisch erzeugen

Hallo ich habe ein Problem undzwar möchte ich gerne wenn ein Button gedrückt wird das ein Linkbutton erstellt wird. Das funktioniert soweit auch so gut. Doch mein Eventhandler auf den Linkbutton funktioniert so nicht. Aber wenn ich den Linkbutton unter "Page_Load" erstelle funktioniert der Eventhandler einwandfrei.

Code:

protected void Button1_Click(object sender, EventArgs e)
{
LinkButton link = new LinkButton();
link.Text = "test";
link.Click += new EventHandler(link_Click);
this.PlaceHolder1.Controls.Add(link);

}  


 private void link_Click(object sender, EventArgs e)  
{  
    LinkButton meinlink = (LinkButton)sender;  
    Response.Write(meinlink.Text);  
    Response.Write(meinlink.ID);  
    Response.Write("Test");  
}
T
243 Beiträge seit 2006
vor 17 Jahren

Oh, hier gibt es ja schon einen Thread mit dem gleichen Thema - hab ich wohl nicht ausreichend gesucht - SORRY, dass ich schon einen neuen Thread ersteltl hab!!

Ich habe genau das gleiche Problem. Kennt denn jemand eine Lösung?

484 Beiträge seit 2006
vor 17 Jahren

Erinnert mich irgendwie an den Thread: Anforderungen an einen guten ASP.NET Coder

Das ganze nennt sich LifeCycleProblem.

Dein Button wird dynamisch dem PlaceHolder zugefügt wie oben in Button1_Click
führt dieser neue Button nun ein Postback aus wird er nicht mehr im PlaceHolder sein weil die Seite sich neu aufbaut.

Lösungsansätze: Cache, Session

Wenn wie oben beschieben der Button im Page_Load erzeugt wird dann greift alles,
weil die Methode Page_Load im Gegensatz von Button1_Click ausgeführt wird!

Experimentiere mal mit Ideen, denn das wird Dich immer wieder begleiten!

Jörg

K
15 Beiträge seit 2006
vor 17 Jahren

Das PageLoad wird immer vor den ClickEvents ausgeführt. Wenn Du also einen Button anklickst, dann erfolgt zuerst ein PageLoad und danach das ClickEvent. Das Problem ist jetzt, dass bevor das PageLoad ausgeführt wird die ganze Seite wieder "leer" ist und somit komplett neu aufgebaut wird. Sie vergisst also alles was Du vorher getan hast, also auch, dass der ButtonX einen EventHandlerY bekommen hat......
.... das ist jedenfalls meine Vermutung.

100000 Lemminge können sich nicht irren.

T
243 Beiträge seit 2006
vor 17 Jahren

Ja, danke für die Antworten. Durch Experimentieren habe ich das auch gerade herausgefunden. Ich habe die Button-Erzeugung ins Page_Init verschoben - nun geht es...

Schönes WE!

103 Beiträge seit 2006
vor 17 Jahren

Hallo, was mache ich denn, wenn ich kein Page_init habe?

Habe nur ein Page_Load und meine anderen Funktionen?

Dumme Frage???

Aber ich hab das versucht und wenn ich auf mein Button klicke, erstellt sich mein neuer Button aber wenn ich dann auf den neuen Button klicke: alles von vorne....

484 Beiträge seit 2006
vor 17 Jahren

Da hilft Dir das Visiual Studio.

Gehe in deine Codebesidedatei.

Suche dir einen Platz innerhalb der Klasse außerhalb von Methoden
und tippe:

"protected override" ein dann liefert Dir Intellisense eine Auswahl an.

protected override void OnInit(EventArgs e)
{
     base.OnInit (e);
}

Jörg

103 Beiträge seit 2006
vor 17 Jahren

ganz allein mit ins Page_init verschieben? funzt das?

Muss mann dafür jetzt Sessions verwenden oder kann man den PageLoad verhindern und einfach nur ne Funktion aufrufen?

Falls man Sessions verwenden muss: Kann mir jemand nen Ansatzt geben, wie man das Problem löst, ohne jetzt selber Ideen auszuprobieren?

484 Beiträge seit 2006
vor 17 Jahren

Ohne genaue Problemstellung lässt sich die Frage nicht pauschal beantworten.

Das OnInit ist im Lifecycle einer ASP.NET Anwendung vor dem Page_Load deshalb funktioniert dies im o.a. Fall.

Den Ansatz das Object zwischen zu speichern wären Cache,Session & Friends.

Manchmal macht es aus Sinn mit Panels/PlaceHoldern zu arbeiten und deren Visible-Eigenschaft (true/false) setzen.

Aber den Lifecycle solltest Du Dir mal genauer ansehen.

Jörg