Avatar billede anri Novice
19. juni 2007 - 11:45 Der er 9 kommentarer og
1 løsning

Dynamiske ID'er på controls

Jeg har en applikation der opretter en dynamisk række controls som jeg skal læse fra javascript.

De enkelte controls ligger under forskellige parent-controls, så jeg ved ikke helt hvor javascript skal lede.

Derfor kunne jeg godt tænke mig at lader serverside generere et javascript array der indeholder ID'et på de controls jeg ønsker at tilgå, og så benytte document.getElementById() til at finde dem i javascript.

Her kommer problemet så..
Jeg ANER ikke hvilken ID de controls har eller får der hvor jeg opretter dem.  Hvis jeg sætter Control.ID, så får jeg en ID der har allE Parent.ID'ere med og .clientID er blot NULL..

Kan jeg ikke helt og holdent bestemme hvilken ID jeg vil give det enkelte element, eller kan jeg gøre noget andet, så jeg med sikkerhed kan finde dem fra javascript?
Avatar billede neoman Novice
19. juni 2007 - 11:58 #1
Du kunne bruge noget i denne stil :
var myTextBox = document.getElementById("<%=TestTextBox.ClientID%>");

på den måde er elementernet kendt af Javascriptet, og du kan hive ID'erne ud efter behov

Og du kan ikke selv tildele ClientID - det gør frameworket.
Avatar billede neoman Novice
19. juni 2007 - 12:06 #2
og det løser ikke DIt problem, kan jeg nu se ved nærmere læsning. Skal lige se havd pokker jeg selv gør i min kode - BRB.
Avatar billede neoman Novice
19. juni 2007 - 12:22 #3
Jeg har brug for ID, for at vide hvilket element der blev klikket på, og det fanger jeg i Request.Form - der leder jeg efter den Control.ID som jeg selv tildelte, og som er en bestanddel af ClientID.

Du kunne måske bruge en tilsvarende taktik på klienten: finde de pågældende elementer vha. document.getElementsByTagName og blandt disse finde dem hvor den pågældende del af ClientID stemmer overens med din ControlID?

Alternativt kan man kigge på hvordan ClientID er komponeret af elementets ID og alle ParentID og "hardkode" dette. Ej vildt elegant, men en virkende ad hoc løsning:) (som jeg selv ikke er ret glad for, men som jeg bruger fordi det var det eneste der virkede i en anden sammenhæng).
Avatar billede anri Novice
19. juni 2007 - 12:49 #4
Mmmmtjaaah. Jooooh.
Måske har jeg en pænere løsning.  Ved udu om kan kan læse ClientId på et eller andet sted i server-koden..
Jeg er så ked at at lægge server-kode i mine .ASPX filer..
Avatar billede anri Novice
19. juni 2007 - 12:58 #5
Ok..  Mit forsøg virker.
JKeg gør det, at jeg serverside opretter en public HashTable med de ID'er og selve Control'en jeg ønsker at tilgå fra javascript.

I min .ASPX fil tilgår jeg dem så på følgende måde :

<!--
<%
  foreach (object o in controlList.Keys){
    Control ctrl = (Control)controlList[o];
    Response.Write(o.ToString() + ",\"" + ctrl.ClientID.ToString() +"\"");
    Response.Write("<br>");
  }
%>

Det er heller ikke ret flot, men jeg undgår at lave tunge sammenligninger i JavaScript delen.

Hvis BARE jeg kunne få fat på den der ClientID server-side så kunne jeg registerer det med
this.Page.RegisterStartupScript
hvilket jo absolut ville give bedre kode..
-->
Avatar billede neoman Novice
19. juni 2007 - 13:09 #6
Jeg har bladret febrilsk i docs, og kan ikke helt se nogen beskrivelse for HVORNÅR ClientID faktisk får en værdi. Så vidt jeg forstår, så tildeler du selv et ID, men får intet tilbage i ClientID.

Jeg kunne forestille mig, at det stensikre tidspunkt på hvilket kontrollen pinedød SKAL have et clientID er i PreRender - det er jo det sidste trin inden det hele sendes til klienten. Så kunne man arbejde sig baglæns i sidens life cycle, og se hvornår de ClientID egentligt bliver oprettet.
Avatar billede neoman Novice
19. juni 2007 - 13:14 #7
Og hvis dette ikke virker, så burde man faktisk selv, i server koden, kunne komponere clientID ved at kigge på control.id for serverkontrollen + control.parent.id + control.parent.parent.id osv, og sammenstykke et ID ud af det, med den korrekte separator (hvad dette separator tegn er, kan man også få ud af kontrollens property)
Avatar billede neoman Novice
19. juni 2007 - 13:25 #8
ok - her er et eksempel på et lignende problem :
http://blog.steeleprice.net/archive/2004/04/12/209.aspx

rækkefølgen har åbenbart en betydning - dvs. at en control skal være tilføjet til sin parent control osv, for at man skal kunne få dennes clientID - og det er jo i og for sig logisk nok.
Avatar billede anri Novice
19. juni 2007 - 13:57 #9
Ja det er vel logisk nok..
Underligt nok er det ikke ret meget man umiddelbart kan finde om dette ude på nettet, så super du gad hjælpe.

Jeg vil se hvad jeg kan brygge sammen udfra dette.

<etta cameron>Du får stuuurt femtal a maaarj</etta cameron>

Læg et svar til mig... :)
Avatar billede neoman Novice
19. juni 2007 - 14:00 #10
stuuuuuuurt tak:)
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