21. juni 2007 - 22:22Der er
10 kommentarer og 2 løsninger
Bestemme ID på elementer fra en brugerkontrol
Hej Eksperter
Jeg har lavet en web control, som modtager ID'et på en artikel (som så indlæses fra en DB), indsætter et billede, noget tekst samt et link.
Når kontrollen sender HTML retur til min side, så får mit billede et ID som er genereret af .NET (f.eks. ctl00_MainContent_ShortStory1_shortStoryImage).
Jeg vil gerne selv bestemme dette ID... Det har jeg så forsøgt i min codebehind fil til web kontrollen, men det nærmeste jeg kan komme det, er at få indsat et ekstra id-tag i min html... Dvs. et det billede der bliver indsat har to id-tags - et som .NET har lavet og ét som jeg har lavet...
Hvordan bestemmer jeg hvilke ID'er de resulterende HTML tags skal have? Jeg ville f.eks gerne have at billedet i min web control, skulle hedde "img_" + artikelID
Nu kender jeg ikke til alle detaljer i dit projekt, men se om du kan bruge ClientId til noget.. det fortæller dig hvad id'et bliver på den kontrol du kalder den på.
Mig bekendt så har kalp helt ret - jeg har selv haft en masse bøvl med det, fordi af forskellige årsager er jeg nødt til at fange den rette kontrol i Request.Form, og der hænger jeg på de sammenstrikkede ClientID'er, ganske som du.
Hvis du har et event som trigges, eksempelvis af et klik på det pågældende billede, så kan man fiske det oprindelige ID ud af eventhandleren (tilhørende den kontrol/det billede) som du ønsker at have ID på.
Finally - der er en metodik i ClientID. På det tidspunkt hvor du skaber kontrollen/billedet i din kode, og efter at kontrollen/billedet er blevet assignet til sin parent control, så kan du, som Kalp foreslår, få ClientID fra kontrollen.
kand ud ikke bruge en ImageButton ? du behøver ikke at vide dens id og bruge den til noget du kan indsætte artikelId i dens commandArgument noget i denne stil har gået ud fra at det ligeer inde i en DataList/ Repeater eller noget lignende og er databindet
og i din codebehind protected void billede_Command(object sender, CommandEventArgs e) { string artikelId = e.CommandArgument; // lav et eller andet med dit artikel id }
skal nok lige have en ToString() på e.CommandArgument om det er en string eller en Convert.ToInt32 om det er en int altså rotected void billede_Command(object sender, CommandEventArgs e) { string artikelId = e.CommandArgument.ToString(); // lav et eller andet med dit artikel id }
Det er ikke så meget selve implementeringen der volder mig kvaler... Det er det faktum, at jeg ikke er herre over den HTML der bliver genereret der irriterer mig. Specielt hvis jeg gerne vil lave noget Javascript DOM ting med mine HTML tags efterfølgende - dér er det irriterende at jeg ikke selv kan bestemme ID'erne på mine tags.
Jeg kan se, at jeg også kan komme ud af problemet ved blot at anvende HtmlXXXX varianterne af de almindelige tags. Jeg har principielt ingen behov for, at fange serverside events på netop disse kontroller, så det er bestemt et alternativ
Synes godt om
Ny brugerNybegynder
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.