Multidesk.be » Forums » ASP » Click-event van dynamisch aangemaakt control oproepen

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door Ezio op zondag 6 april 2014 om 20:18:34.
Ezio's avatar
Multiviteit: 973
Hey,

Ik heb in de code van mijn webpagina dynamisch (dus zonder een control te slepen uit de toolbox) een label aangemaakt (zie code hieronder).
CODE
  1. Dim lbl As New label
  2. lbl.text = "Yabba Dabba Doo!"
  3. pnlPaneel.Controls.Add(lbl)
  4.  


Vervolgens wil ik een actie uitvoeren als de bezoeker op het label klikt. Ik kan echter geen click-event aanmaken voor het label omdat het in de code aangemaakt werd, kan er dus niet in design dubbel op gaan klikken om een event aan te maken. Hij is ook niet te vinden in de lijst met controls in het VB-bestand (zie afbeelding hieronder).

http://i.snag.gy/uA3Vt.jpg


Hoe kan ik toch een click-event aanmaken voor dit item? :)

Thx!
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #1 geschreven door thekid op zondag 6 april 2014 om 20:22:48.
thekid's avatar
Multiviteit: 5273
Moderator
CODE
  1. AddHandler lbl.Click, AddressOf functieNaam
  2.  
  3. Sub functieNaam(Sender as Object, e as EventArgs)
  4. ' sender is hier je label (als object)
  5. End Sub
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #2 geschreven door Ezio op zondag 6 april 2014 om 20:37:58.
Ezio's avatar
Multiviteit: 973
Krijg de error 'Click is not an event of System.Web.UI.Webcontrols.Label' :/
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #3 geschreven door thekid op zondag 6 april 2014 om 20:39:53.
thekid's avatar
Multiviteit: 5273
Moderator
Mja, dat klopt wel

OnMouseDown misschien? Mocht je zeggen wat je wilt bereiken, dan kan ik je eenvoudiger helpen misschien :)

Wil je bvb enkel een msgbox tonen, dan kan dit ook via lbl.ClientClick = "javascript:alert('hey');" (hmm opnieuw moet ik denken of je dit vanuit asp.net kunt :D)
Deze tekst werd het laatst bewerkt voor 11.74 % door thekid op zondag 6 april 2014 om 20:40:47.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #4 geschreven door Ezio op zondag 6 april 2014 om 20:49:11.
Ezio's avatar
Multiviteit: 973
OnMouseDown werkt helaas ook niet. Maar weet nu al in welke richting ik moet zoeken dus kan ik meezoeken :D Intellisense toont trouwens enkel de events Databinding, Disposed, Init, Load, Prerender en Unload.

Moet het ID achterhalen om vervolgens een querystring op te bouwen en dan de bezoeker door te sturen. Heel wat dus :)

Het moet niet per se een label zijn trouwens. Zolang hij HTML-tekst kan tonen en een CSS klasse kan bevatten is het oké :)
Deze tekst werd het laatst bewerkt voor 1.34 % door Ezio op zondag 6 april 2014 om 20:56:02.
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #5 geschreven door thekid op zondag 6 april 2014 om 21:00:42.
thekid's avatar
Multiviteit: 5273
Moderator
Je kan ook een LiteralControl gebruiken

kon je maar dit doen hé ;)
CODE
  1. <html>
  2. <head>
  3. <title>test</title>
  4. </head>
  5. <body>
  6. <label id="myId"
  7.  
  8. onclick="javascript:document.location.href =
  9.  
  10. window.location.pathname + '?id=' + escape
  11.  
  12. (this.id);">Scoobody doo</label>
  13. </body>
  14. </html>
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #6 geschreven door Ezio op zondag 6 april 2014 om 21:08:05.
Ezio's avatar
Multiviteit: 973
Zou te ingewikkeld worden (voor mij toch :p ). Mijn code kijkt eerst naar de 20 meest recente berichten in de databank, en maakt dan 20 labels aan met de titels. Wat ik nu wil maken is dat je naar de berichtpagina gaat door op het label te klikken.

I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #7 geschreven door thekid op zondag 6 april 2014 om 21:10:10.
thekid's avatar
Multiviteit: 5273
Moderator
Hyperlink control ;)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #8 geschreven door Ezio op zondag 6 april 2014 om 21:15:47.
Ezio's avatar
Multiviteit: 973
Alles wordt wel correct getoond met een Hyperlink, maar kan dan alsnog geen click-event oproepen :/

EDIT: hoho, blijkbaar kun je ook linkbutton gebruiken :D

EDIT 2: We zijn al een stapje dichter, maar lukt nog steeds niet om een actie uit te voeren als erop geklikt wordt
CODE
  1.  
  2. Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
  3.  
  4. Dim lb As New LinkButton
  5. lb.text = "Hallo!"
  6. lb.Attributes.Add("ID", dbreader.GetString(0))
  7.  
  8. pnlPaneel.Controls.Add(lb)
  9.  
  10.  
  11. AddHandler lb.Click, AddressOf KlikOpKnop
  12.  
  13.  



CODE
  1.  
  2.  
  3.  Sub KlikOpKnop(Sender As Object, e As System.EventArgs)
  4.         Response.Redirect("http://www.multidesk.be")
  5.     End Sub
  6.  
Deze tekst werd het laatst bewerkt voor 62.68 % door Ezio op zondag 6 april 2014 om 21:35:51.
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #9 geschreven door thekid op zondag 6 april 2014 om 22:16:02.
thekid's avatar
Multiviteit: 5273
Moderator
CODE
  1.         For index As Integer = 0 To 20
  2.             Dim hl As New HyperLink
  3.             hl.NavigateUrl = "showpost.aspx?post=" & index
  4.             hl.Text = "Text " & index
  5.             Me.Controls.Add(hl)
  6.         Next
  7.  


:)
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #10 geschreven door Ezio op maandag 7 april 2014 om 00:53:00.
Ezio's avatar
Multiviteit: 973
Zou eigenlijk echt een manier moeten vinden om informatie te achterhalen van de LinkButton waarop er geklikt werd :)
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #11 geschreven door thekid op maandag 7 april 2014 om 08:38:29.
thekid's avatar
Multiviteit: 5273
Moderator
Server side: via querystring of formdata (Request.QueryString("naam_van_control"), Request.Form("naam_van_control") of Request("naam_van_control"))

Via client side: JavaScript (document.getElementById('ID')) of JQuery ($('#ID')) of JQuery($('[name=naam]') of JQuery ($('.className'))

Verder, click events zorgen voor een postback, dat is ->
alle data wordt terug naar de server gestuurd, je pagina wordt opnieuw opgebouwd, jij moet dan definiëren wat precies te gebeuren is wanneer je andere postdata hebt.
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
^ Reactie #12 geschreven door Ezio op maandag 7 april 2014 om 16:37:36.
Ezio's avatar
Multiviteit: 973
Thx, maar dan heb ik nog steeds geen manier om een klik op de LinkButton te kunnen registreren.

Misschien helpt het als je mijn code ziet (de procedure die de laatste berichten toont), zodat je begrijpt waar ik naartoe wil :)
http://pastebin.com/2CVNnGtj

Op mijn homepage toon ik dus onder mekaar de laatste blogberichten en video's. Bij het laden van de pagina toon ik 20 berichten, maar wanneer ik naar beneden scroll en klik op de knop 'Toon meer', wil ik daar nog eens 20 berichten bijdoen (m.a.w. intAantalRecords verhoogt met 20). Elk record wordt getoond als een LinkButton die dynamisch in de code aangemaakt wordt. Als attribuut geef ik elke LinkButton het ID van het record mee (lb.Attributes.Add("ID", dbreader.GetString(0))). Dit werkt allemaal :)

Maar wanneer de bezoeker op de LinkButton met ID 15 klikt, moet hij doorgestuurd worden naar pagina van dat bericht. Hiervoor gebruik ik een querystring :)

Mijn probleem zit hem dus in het feit dat ik die querystring niet kan opbouwen omdat ik niet weet op welke LinkButton de gebruiker geklikt heeft. Om het Post_ID in de querystring te krijgen moeten we immers eerst achterhalen op welke LinkButton de gebruiker juist geklikt heeft.


Ik dacht eraan om FindControl te gebruiken, maar weet niet precies naar welk control hij dan moet zoeken. Voorlopig heb ik dit in de Page_Load:
CODE
  1.  
  2. Dim lb as new LinkButton
  3. lb = ctype(pnlHome.FindControl("Control die hij moet zoeken"),LinkButton)
  4.  


Moest dat lukt zou ik iets proberen in de trant van "IF lb.click = True THEN ID achterhalen en querystring opbouwen "

I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #13 geschreven door Ezio op dinsdag 8 april 2014 om 22:59:52.
Ezio's avatar
Multiviteit: 973
Misschien brengt dit ons een stapje dichter bij de oplossing.

Daar geven deze code: "RemoveMe.Click += new Eventhandler()". Het probleem is echter dat ik de optie 'click' niet heb, ik kan enkel kiezen voor 'OnClientClick' :/
I'm a gamer because I don't have a life... I've chosen to have many
^ Reactie #14 geschreven door thekid op dinsdag 8 april 2014 om 23:28:39.
thekid's avatar
Multiviteit: 5273
Moderator
Even een klein voorbeeldje met de ItemRepeater

misschien maakt het wat duidelijker, misschien ook niet :D


Bijlage: 5c93e9536b9c031055f6176ac2347a46.zip
"Human beings make life so interesting. Do you know, that in a universe so full of wonders, they have managed to invent boredom." - Death in Hogfather
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen