[ASP.NET 2.0] Client-side event bij RectangleHotSpot

Pagina: 1
Acties:
  • 196 views sinds 30-01-2008
  • Reageer

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06:42
Ik wil in ASP.NET 2.0 Beta 2 OnMouseOver en OnMouseOut events toevoegen aan RectangleHotspots in een ImageMap. In Beta 1 lukte mij dit door onderstaande truuk toe te passen:
ASP.NET:
1
Rectangle.AlternateText = Chr(34) & " onmouseover=" & Chr(34) & "somescript()" & Chr(34) & " onmouseout=" & Chr(34) & "somescript()"

Dit is niet meer toe te passen in Beta 2 omdat de Chr(34) vertaald wordt als " ipv daadwerkelijk een " in tegenstelling tot Beta 1.

In Beta 1 werd het resultaat:
HTML:
1
alt="" onmouseover="somescript()" onmouseout="somescript()"

in Beta 2 is het resultaat:
HTML:
1
alt="" onmouseover="somescript()" onmouseout="somescript()"
Nu heb ik gezocht op internet, maar ik kom steeds uit bij Control.Attributes.Add, maar omdat een RectangleHotspot geen attributes kent, kan ik ook geen events toevoegen.

Hoe kan ik toch op een 'nette' manier events toevoegen aan een RectangleHotspot (of welke control zonder attributes dan ook)?

Een 'vuile' manier om dit te doen zou bijvoorbeeld kunnen door een unieke waarde aan Rectangle.AlternateText toe te kennen en deze waarde met Replace() door wat extra aanhalingstekens en OnMouseOver events te vervangen net voordat de gegenereerde HTML naar de client wordt gestuurd.

[ Voor 15% gewijzigd door Swerfer op 25-06-2005 18:01 ]

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 15:01

gorgi_19

Kruimeltjes zijn weer op :9

" escapen dmb "" ?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06:42
Je bedoeld "" ipv Chr(34)?

Dat heb ik ook al geprobeerd, werkt ook niet.

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06:42
Dit werkt helaas ook niet. Ik denk dat uit veiligheidvoor een attribute altijd een HtmlEncode uitgevoerd voor de text tussen de openings en sluitings aanhalingsteken. Althans, sinds Beta 2...

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06:42
Ik heb het toch maar op de 'vuile' manier opgelost, door de gegenereerde HTML af te vangen en daar de gewenste events aan toe te voegen...

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
als je client events wilt toevoegen aan servercontrols kan je dit het beste doen in de code-behind. In de code-behind gebruik je dan de 'attributes' property

bijv:
code:
1
myControl.Attributes.Add("onmouseover", "alert('you are now hovering dude');")


4guys hebben hier iets over geschreven

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06:42
joopst schreef op zaterdag 25 juni 2005 @ 20:56:
als je client events wilt toevoegen aan servercontrols kan je dit het beste doen in de code-behind. In de code-behind gebruik je dan de 'attributes' property

bijv:
code:
1
myControl.Attributes.Add("onmouseover", "alert('you are now hovering dude');")


4guys hebben hier iets over geschreven
Dat is nu juist het probleem. Zoals ik in mijn openingspost al zei, kent een (rectangle-)hotspot geen attributes, en kan je ze ook niet toevoegen...

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
na wat zoekwerk op msdn kom ik erachter dat die rectanglehotspot niet erft van webcontrol of control. Dat is nodig om die 'attributes' property te hebben.

De rectangle-hotspot class kan je gebruiken om bij een ' System.Web.UI.WebControls.ImageMap'-control regions te definieren. Die ImageMap control erft wel van webcontrol.

Volgens mij is het zo dat die rectanglehotspot vooral gebruikt wordt om server-side-events te genereren. En als je client-side hovers wilt, moet je die (denk ik) mouse-over javascripts op de imagemap-control plaatsen.

Ik heb het zelf niet geprobeerd, maar enkel gelezen op msdn..

msdn, imagemap
msdn, rectanglehotspot

  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06:42
joopst schreef op zondag 26 juni 2005 @ 12:47:
na wat zoekwerk op msdn kom ik erachter dat die rectanglehotspot niet erft van webcontrol of control. Dat is nodig om die 'attributes' property te hebben.

De rectangle-hotspot class kan je gebruiken om bij een ' System.Web.UI.WebControls.ImageMap'-control regions te definieren. Die ImageMap control erft wel van webcontrol.

Volgens mij is het zo dat die rectanglehotspot vooral gebruikt wordt om server-side-events te genereren. En als je client-side hovers wilt, moet je die (denk ik) mouse-over javascripts op de imagemap-control plaatsen.

Ik heb het zelf niet geprobeerd, maar enkel gelezen op msdn..

msdn, imagemap
msdn, rectanglehotspot
onmouseover javascript op de imagemap zelf lukt niet omdat ik dynamisch gegenereerde hotspots maak, die per stuk een andere waarde door moet geven aan een javascript.

Bijvoorbeeld:

hotspot1 geeft javascript:somefunction("willekeurige blaat","blaat1")
hotspot2 geeft javascript:somefunction("willekeurige blaat","blaat2")
enzv
Tevens als ik de onmouseover event op de imagemap zet, dan moet ik mijn javascript ook dynamisch maken, om te kijken of de onmouseover wel over een hotspot gaat, ipv over de rest van de image...

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06:42
Iemand anders nog een idee?

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 06:42
Ik heb het probleem destijds opgelost met onderstaande code:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
    Dim sb As New StringBuilder
    Dim sw As New StringWriter(sb)
    Dim hWriter As New HtmlTextWriter(sw)
    MyBase.Render(hWriter)
    Dim PageResult As String = sb.ToString
    For a As Integer = 0 To aantArtikelen
        If Artikelen(a) <> "" Then
            PageResult = Replace(PageResult, "title=" & Chr(34) & CStr(a) & Chr(34), Artikelen(a))
            PageResult = Replace(PageResult, "alt=" & Chr(34) & CStr(a) & Chr(34), "")
        End If
    Next
    writer.Write(PageResult)
End Sub
Bij elke hotspot waar een onmouseover event en een onmouseout event moet komen heb ik een alternatetext attribute toegevoegd met een oplopend nummer. Tevens heb ik in array Artikelen de javascript code geplaatst die in plaats van de alternatetext moet komen. Bovenstaande sub vangt de HTML output af en vervangt de alternatetext door de code in de array Artikelen.

Nu kost dit bij veel hotspots nogal wat tijd. Bij 150 hotspots kost dit ongeveer 3 seconden.
Is er een manier om het één en ander te versnellen? Is er bijvoorbeeld een sneller alternatief voor de replace functie?

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com

Pagina: 1