Avatar billede mrbensen Nybegynder
20. juli 2006 - 15:33 Der er 2 kommentarer og
1 løsning

Dynamic Controls Viewstate

Jeg har et problem med dynamiske kontroller i .net 2.0.

Jeg kan ikke få dem til at beholde deres viewstate. Jeg har prøvet forskellige ting, men kan simpelthen ikke få det til at virke.

Lige meget om jeg laver mine dropdownlister i OnInit eller Page_Load, så når jeg siden poster back kan jeg ikke få kontrollerne til at få den værdi jeg har givet dem manuelt på siden.

Jeg har prøvet at sætte værdier på dem i Page_Load (på postback), men de bliver overskrevet mellem Page_load og Page_Prerender - jeg ved ikke om det har noget med ViewState at gøre.

Håber der er nogle der kan fortælle mig hvad jeg gør forkert.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
            AddFields(true);   
        else
            AddFields(false);
    }



    protected void AddFields(bool blnSetDatabaseValue)
    {
        Response.Write("test " + blnSetDatabaseValue);

        HtmlTable htDropdown = new HtmlTable();

        for (int i = 0; i < 5; i++)
        {
            HtmlTableCell htdText = new HtmlTableCell();
            htdText.Width = "320";

            Label lblText = new Label();
            lblText.Text = "test" + i;

            htdText.Controls.Add(lblText);

            HtmlTableRow htrDropdown = new HtmlTableRow();
            HtmlTableCell htdDropdown = new HtmlTableCell();

            DropDownList ddlDrop = new DropDownList();
            ddlDrop.Attributes.Add("runat", "server");
            ddlDrop.ID = i.ToString();


                ListItem lItem = new ListItem();
                lItem.Text = "Categorical";
                lItem.Value = "100";
                ddlDrop.Items.Add(lItem);


                lItem = new ListItem();
                lItem.Text = "Long";
                lItem.Value = "100";
                if (blnSetDatabaseValue)
                    lItem.Selected = true;

                ddlDrop.Items.Add(lItem);

            if (Trace.IsEnabled)
                Trace.Write(ddlDrop.SelectedIndex + "<br>");

            //htdDropdown.Controls.Add(hSelect);
            htdDropdown.Controls.Add(ddlDrop);
            htrDropdown.Controls.Add(htdText);
            htrDropdown.Controls.Add(htdDropdown);
            htDropdown.Controls.Add(htrDropdown);
        }

        htdDropdowns.Controls.Add(htDropdown);
    }
Avatar billede dna Nybegynder
20. juli 2006 - 16:04 #1
Læs evt. lidt her:
http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx

Det er nok samme problem som denne gut du er løbet ind i.
Avatar billede mrbensen Nybegynder
21. juli 2006 - 08:29 #2
Det er rigtig smart med den placeholder og det sparer da noget kode på postback. Viewstate bliver bare pænt stor. Men det var egentlig ikke det der var det konkrete problem.

Mit problem er at de værdier jeg vælger i min dropdownlist på siden (i min browser), forsvinder ved postback - også når jeg bruger ovenstående control til at tilføje dem.

Jeg har læst mig frem til at dynamiske kontroller, der bliver lavet i Page_Load automatisk skulle blive tildelt deres viewstate information af ASP.NET, men det er altid det første element der er valgt.

Jeg kan endda sætte en bestemt værdi i page_load (i test øjemed) og se at den er blevet overskrevet når jeg kommer til min Page_Prerender - uden at min kode har foretaget sig noget. Så det ser ud til at ASP.NET selv foretager sig noget - men det er ikke de rigtige værdier den sætter mine kontroller til.

Håber det er til at forstå hvad jeg mener...
Avatar billede mrbensen Nybegynder
31. august 2006 - 09:53 #3
Value skulle være forskellig i listitems'ne...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester