Hallo,
da ich neu in ASP.NET bin, stellt sich mir eine Frage bei der ich hoffe, ihr könnt mir weiterhelten. Ich habe bereits viel im Netz über das Thema "Zugriff auf Werte von dynamisch hinzugefügten Controls" gesucht und gefunden.
Jetzt hatte ich die Idee, einfach eine eigene Collection von Controls (z.B.: List<TextBox>) anzulegen und mir dort die Referenzen zu merken. Nach einem Postback stehen nun auch die Werte zu Verfügung und alles läuft wunderbar.
Die Frage ist jetzt aber, ist das "schöner Code" und läuft das auch, wenn viele Benutzer die Seite verwenden? Stichwort "Garbage"...
Hier noch der Code, welcher funktioniert:
IList<TextBox> members = new List<TextBox>();
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 4; i++)
{
var p = new Panel();
p.Controls.Add(new Label() { Text = "Person " + i + ":" });
var tb = new TextBox() { ID = "InputPers_" + i };
p.Controls.Add(tb);
members.Add(tb);
p.Controls.Add(new LiteralControl("<br />"));
PlaceHolder1.Controls.Add(p);
}
}
protected void ButtonReserve_Click(object sender, EventArgs e)
{
Label1.Text = "";
foreach (var t in members)
{
Label1.Text += t.Text + ";";
}
}
Funktionsweise: Die Collection wird bei jedem Laden der Seite stets neu angelegt und der ViewState ja trotzdem in die dynamichen Controls geschrieben (restored) - das ist dann auch der Grund warum es funktioniert (die Referenzen sind aber bei jedem Postback neu, weil ich ja tatsächlich neue Controls anlege)....
Danke, LG Zentauro
Hallo Zentauro
Solange du immer gleich viel Controls erstellst, wie vor dem Postback ist es kein Problem.
Auch mit Performance oder der Müllabfuhr wirst du keine Probleme haben 😃
Eine Alternative ist natürlich per ASPX deklerativ festlegen und per Visible=false / true umstellen.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter,
vielen Dank für deine Antwort! An das deklarative Anlegen hab ich auch schon gedacht, wobei es mir besser gefällt die Referenzen in einem geeigeneten Behälter zu speichern...
Danke nochmals, LG Philipp