Avatar billede carstensuurland Nybegynder
21. juni 2007 - 22:22 Der 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
Avatar billede kalp Novice
21. juni 2007 - 22:26 #1
Det kan du ikke... ctl00 er controllens id og den bliver tilføjet netop for at sikre sig at det ID er unikt når det bliver rendered på en anden side..

så du skal finde et workaround til det eller et eller andet grimt "hack" til at fjerne kontrol id'et som automatisk bliver tilføjet.

jeg har indtil videre altid valgt det grimme hack:P
Avatar billede kalp Novice
21. juni 2007 - 22:28 #2
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å.
Avatar billede neoman Novice
21. juni 2007 - 23:58 #3
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.
Avatar billede a1a1 Novice
22. juni 2007 - 04:36 #4
du kan jo også bare skrive dit billede ud til en literal ;o)
<asp:literal id="litPic" runat="server" />

og i koden
litPic.Text = "<img src=""pictureX.gif"" id=""img_" & artikelID & """ />"
Avatar billede kalp Novice
22. juni 2007 - 08:20 #5
a1 >> jeg  har godt nok ikke testet det selv med litteral, men kan ikke tro det virker så snart der er tale om <asp: og runat="server" involveret.
Avatar billede a1a1 Novice
22. juni 2007 - 08:45 #6
;o) men har du/man brug for at det skal være en "<asp:image..."?
Avatar billede carstensuurland Nybegynder
22. juni 2007 - 08:59 #7
<asp:literal> er naturligvis en mulig løsning, men det ændrer ikke på selve problemstillingen...

Men jeg har vist fået det svar jeg ledte efter : Tak for hjælpen.

Hvis I alle tre ligger et svar, så får I point
Avatar billede lifo Nybegynder
22. juni 2007 - 10:58 #8
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

<asp:ImageButton ID="ImageButton1"  ImageUrl='<%# Eval("imagePath") %>'  CommandArgument='<%# Eval("artikelID") %>' OnCommand="billede_Command" runat="server" />

og i din codebehind
protected void billede_Command(object sender, CommandEventArgs e)
    {
        string artikelId = e.CommandArgument;
        // lav et eller andet med dit artikel id
    }
Avatar billede lifo Nybegynder
22. juni 2007 - 11:00 #9
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
    }
Avatar billede carstensuurland Nybegynder
22. juni 2007 - 11:02 #10
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.
Avatar billede a1a1 Novice
22. juni 2007 - 13:06 #11
svaret ;o)

hvis du skal bruge meget javascript, så er det nemmeste at skrive html ud "direkte" (literal), ligesom med "gammel" asp ;o)
Avatar billede carstensuurland Nybegynder
25. juni 2007 - 14:40 #12
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
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