Laden...

ASP.NET - Zugriff auf dynamische Controls

Erstellt von Zentauro vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.400 Views
Z
Zentauro Themenstarter:in
112 Beiträge seit 2007
vor 11 Jahren
ASP.NET - Zugriff auf dynamische Controls

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

5.941 Beiträge seit 2005
vor 11 Jahren

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

Z
Zentauro Themenstarter:in
112 Beiträge seit 2007
vor 11 Jahren

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