Avatar billede anhansen Nybegynder
15. juni 2004 - 14:16 Der er 12 kommentarer og
1 løsning

Placeholder bliver ikke renderet efter postback?

Hej,

Jeg har et hurtigt spørgsmål.

Jeg har en placeholder hvori jeg tilføjer en usercontrol. Ved tryk på en knap tilføjer jeg en mere af samme type usercontrol til "forsvinder" min placeholder fra skærmen...

Hvad kan det skyldes.

Jeg har gemt min placeholder i en session og genindlæser den hver gang siden vises, og hvis jeg skriver placeholder.controls.count ud, kan jeg se at den stiger for hvert tryk på knappen.

Hvorfor bliver indholdet ikke renderet?
Avatar billede anhansen Nybegynder
15. juni 2004 - 14:33 #1
Der må da være andre der har haft det problem?

Uanset om jeg gemmer noget.. Hvis jeg bare trykker på en knap der blot laver postback er min placerholder væk når siden kommer tilbage?
Avatar billede yellow Nybegynder
15. juni 2004 - 14:47 #2
Måske får du nulstillet din placeholder i pageload?
Kan være der er noget kode der skal ind i en if(!Page.isPostBack)?

Kan du vise lidt kode?
Avatar billede casper_skovgaard Nybegynder
15. juni 2004 - 15:00 #3
tilføjer du indholdet efter PreRender? hvis ikke så prøv det, jeg mener ikke indholdet af en control gemmes med mindre det tilføjes i PreRender
Avatar billede anhansen Nybegynder
15. juni 2004 - 15:27 #4
Lidt kode:
private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here
            if(!Page.IsPostBack)
            {
                BindData();
                LoadControls();
            }
            Response.Write(placeProjektLeder.Controls.Count);
        }
private void LoadControls()
        {
            ctrlProjektLeder leder = (ctrlProjektLeder)LoadControl("ctrlProjektLeder.ascx");
           
            leder.BindData(); //BindData() er en funktion jeg har lavet. Som sørger for at binde værdier til en dropdown i usercontrollen.
            placeProjektLeder.Controls.Add(leder);
        }


protected override object SaveViewState()
        {
            Session["Place"] = placeProjektLeder;
            return base.SaveViewState();
        }
private void Button2_Click(object sender, System.EventArgs e)
        {
            LoadControls();
        }
override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            if(Session["Place"] != null)
                placeProjektLeder = (PlaceHolder)Session["Place"];
            InitializeComponent();
            base.OnInit(e);
        }

Der var vist det vigtigste af koden...
Avatar billede anhansen Nybegynder
15. juni 2004 - 15:29 #5
Mht. til preRender, hvordan vil du så gøre det i ovenstående?
Skal jeg så gemme "alle" instanser af usercontrollen i et array, og så løbe det igennem og add til placeholderen i preRender()?
Avatar billede casper_skovgaard Nybegynder
15. juni 2004 - 15:38 #6
Prøv at flytte den kode som ligger i Page_Load til Page_PreRender.
Avatar billede anhansen Nybegynder
15. juni 2004 - 15:41 #7
Det bliver stadig ikke... Jeg har nu også:
        protected override void OnPreRender(EventArgs e)
        {
            if(!Page.IsPostBack)
            {
                BindData();
                LoadControls();
            }
            Response.Write(placeProjektLeder.Controls.Count);
   
        } 
Istedet for at det står i page_load.
Avatar billede casper_skovgaard Nybegynder
15. juni 2004 - 16:10 #8
jeg har lige prøvet at lave en simpel test, og jeg kan heller ikke få det til at virke.
Så PreRender er ikke løsningen :( Men det burde være muligt...
Avatar billede anhansen Nybegynder
16. juni 2004 - 08:05 #9
Jeg har måske fundet lidt af grunden... Ved ikke om det kan være rigtigt... Men hvis jeg kigger i det kode som siden genererer, så er det ikke muligt at se selve placeholderen. Dvs. at når jeg postbacker siden, så set fra "serverens" synspunkt, så er der vel ikke rigtigt noget i siden at putte det i? Kan det være noget der betyder noget? Den kan jo ikke finde det der er i placeholderen, da placeholderen ikke er i koden mere.

Så hvis man kan finde en måde at lave placeholderen "explicit" eller lign. kunne det måske hjælpe. Bare så den fik en <div> omkring med et name og id...
Avatar billede anhansen Nybegynder
16. juni 2004 - 08:13 #10
Prøver lige og se om jeg kan gøre det samme med et panel... :-) Den er da synlig i koden...
Avatar billede anhansen Nybegynder
16. juni 2004 - 08:18 #11
Af en eller anden grund renderer panel heller ikke dem der ligger i controls?

Tror jeg er nødt til at lave en anden (knap så effektiv) fremgangsmåde.

Jeg har ikke tid til at blive ved at forsøge desværre.. For det nager mig at jeg ikke kan få det til at virke..

Men nu "genskaber" jeg kontrollerne for hver gang, og gemmer dem i et array, som kommer i viewstate. På den måde kan jeg genskabe det hver gang siden kommer.
Lidt langsommere.. Men formentligt virker det.. OG det er jo også vigtigt.. :-)
Avatar billede anhansen Nybegynder
16. juni 2004 - 09:23 #12
Er der en af jer der har en god skabelon til hvordan man "bør" gøre det.

Altså jeg har en "template" med en dropdown og to tekstbokse. Dem vil jeg gerne kunne tilføje "dynamisk" og sidenhen selvfølgelig kunne hive informationen ud af dem.
Avatar billede anhansen Nybegynder
16. juni 2004 - 09:41 #13
Jeg lukker lige den her tråd.. Tak for hjælpen... Men der kom jo desværre ikke en løsning.. :'-(
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