Avatar billede maude Nybegynder
19. maj 2007 - 21:42 Der er 13 kommentarer og
1 løsning

Dynamiske Controls : TextBox

Jeg har i en PlaceHolder dynamisk tilføjet labels og textboxe.
Hvordan får jeg aflæst hvad brugeren har indtastet?

Jeg har forsøgt følgende:

foreach (Control c in Controls)
{ if (c is TextBox)
  { if (c.ID.IndexOf("txb") == 0)
    {
      svar = ((TextBox)c).Text;                     
    }
  }
}

Men c er aldrig en TextBox. Hvad gør jeg galt?
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 21:45 #1
Du skal tilføje textboxen til placeholderen igen ved postback.
Ved at f.eks. override on prerender.
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 21:47 #2
Du kan evt overveje at bruge denne her:
http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx
Den gør det for dig.
Avatar billede maude Nybegynder
19. maj 2007 - 22:14 #3
Placeholderen er ikke dynamisk kun labels og textboxes.
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 22:22 #4
nej er godt klar over placeholderen ikke er dynamisk, men dynamiske kontroller skal generes igen ved postback.
Det vil sige at alle de tekstbokse og andet skal tilføjes til placeholderen igen for at persiste dem over et postback.

Det er formålet med den dynamiske placeholder jeg gav et link på.
Den sørger for at du ikke skal gøre det manuelt.
Avatar billede maude Nybegynder
19. maj 2007 - 22:40 #5
Jeg kan ikke læse de downloadfiler fra linket så det hjælper mig ikke.

Jeg tror jeg har styr på postback, de indtastede værdier er der i hvert fald stadig.
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 23:24 #6
på hvilket tidspunkt forsøger du med
oreach (Control c in Controls)
{ if (c is TextBox)
  { if (c.ID.IndexOf("txb") == 0)
    {
      svar = ((TextBox)c).Text;                   
    }
  }
}
?

Som jeg forstår dig har du persistet dine controller mellem postsbacks ?
Avatar billede maude Nybegynder
19. maj 2007 - 23:45 #7
Jeg forsøger at fange indtastninger der hvor jeg sætter session-variabler (de passer) og før jeg runder serveren.

Efter at have været på serveren genskabes de dynamiske labels og textboxe.
Avatar billede dr_chaos Nybegynder
19. maj 2007 - 23:52 #8
kan du få fat i din placeholder på det sted ?
Avatar billede maude Nybegynder
20. maj 2007 - 00:34 #9
Ja det ser sådan ud.

Skal FindControl evt. anvendes før foreach?

Hvis dr chaos ikke lige har et svar på fingerspidserne så spørger jeg min underviser. Smid et svar så får du point for ihærdighed
Avatar billede dr_chaos Nybegynder
20. maj 2007 - 07:51 #10
Ok så skal du løbe igennem din placeholder

PlaceHolder plc = Page.FindControl("PlaceHolder") as PlaceHolder;
if(plc != null)
{
foreach (Control c in plc.Controls)
{ if (c is TextBox)
  { if (c.ID.IndexOf("txb") == 0)
    {
      svar = ((TextBox)c).Text;                 
    }
  }
}
}

og svar :)
Avatar billede maude Nybegynder
20. maj 2007 - 11:45 #11
Det virker nu heller ikke. Som om placeholderen ikke indeholder nogle controls.

Tak for forsøget
Avatar billede dr_chaos Nybegynder
20. maj 2007 - 17:13 #12
ok prøv evt at vise den præcise kode tegion hvor du kalder metoden.
Avatar billede maude Nybegynder
20. maj 2007 - 19:06 #13
Din anden foreach virker, det var navigeringen mellem siderne den var gal med. Følgende er også muligt og måske lidt mere enkelt:

for (int i = 0; i < n; i++)
{
  svar = Request.Form["txb" + i];  // txb = id for textbox + autonummerering
}

Min underviser læser også mail om søndagen og sendte et eksempel. Endnu engang tak for ihærdigheden.
Avatar billede dr_chaos Nybegynder
20. maj 2007 - 19:09 #14
ah ok, det var lidt svært for mig at se :)
Bruger kun yderst sjældent request.form :)
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