Toon posts:

[ASP.NET 2.0] Event toevoegen na afhandelen van event

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik loop met APS.NET 2.0 tegen een lastig probleem aan. Ik maak in een pagina dynamisch diverse controls aan met ieder hun eigen events. Nu weet ik dat dit voor een dynamische control al wat extra aandacht vereist, want een event wordt pas afgehandeld als de control ook is aangemaakt in de postback.

Nu vraag ik mij af hoe ik de het volgende probleem het best op kan lossen:
Op een pagina wil ik drie buttons hebben; 'A', 'B' en 'C'. Zodra 'A' wordt ingedrukt moet 'B' zichtbaar worden en zodra 'B' ingedrukt wordt moet 'C' zichtbaar worden.

Ik dacht dit op te lossen door in de page_init alle drie de controls te declareren en te voorzien van hun eigenschappen. Daarna geef ik gelijk aan via 'AddHandler' wat de functies zijn die moeten worden uitgervoerd als ik op de controls klik. LET OP: Ik voeg ze nog niet toe aan mijn form, behalve control 'A'.

Als de het click-event van 'A' wordt afgehandeld voeg ik 'B' toe aan mijn form en het event van 'B' voegt 'C' toe aan het form.

Het probleem is nu echter dat het event van 'B' niet (goed) word uitgevoerd.Want 'B' was in de page_load nog niet geAdd op het form. (schijnt dus nodig te zijn).

Zoals je ziet ben ik dus niet in staat om een nieuwe button MET een event toe te voegen op basis van een ander event.

De enige mogelijkheid die ik zie is niet actief maar reactief te handelen. Door alle controls toe te voegen, maar in de prerender weer te verwijderen als ze overbodig zijn. Ofwel als een event juist NIET is afgevuurd. (niet netjes)

Heeft iemand een ander idee?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je kunt ze het beste gewoon altijd alle 3 toevoegen en dan de Visible property op false zetten. Op het moment dat ze dan wel zichtbaar worden zet je gewoon de visible property op true

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
rwb schreef op woensdag 10 mei 2006 @ 16:24:
Je kunt ze het beste gewoon altijd alle 3 toevoegen en dan de Visible property op false zetten. Op het moment dat ze dan wel zichtbaar worden zet je gewoon de visible property op true
Dat vind ik dus geen nette oplossing. Een andere pagina waar ik een soortgelijk probleem heb. Heb ik bijvoorbeeld 50 interesses, waarop een score kan worden aangegeven. Normaal krijg je aan getalletje te zien achter de interesse, maar druk je op wijzigen, dan krijg je tien radiobuttons te zien achter iedere interesse.

Het zou dan betekenen dat je in je HTML wel 500 radiobuttons hebt, en 50 getallen, maar alleen de getallen of de radiobuttons zijn zichtbaar.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ok als het er zoveel zijn is het idd niet echt netjes. In je voorbeeld ging het over 3 knoppen dus dan is het makkelijker om het op die manier te doen.
Ik heb er zelf ook wel eens problemen mee gehad en heb toen gespeeld met de ChildControlsCreated property en de CreateChildControls method/event. Daarmee heb ik het toen wel voor elkaar gekregen maar ik weet even niet meer precies hoe dat ging.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • giMoz
  • Registratie: Augustus 2002
  • Laatst online: 21-01 09:10

giMoz

iets met meester...

Je hebt dan in je HTML helemaal niet die 500 radiobuttons.
Als je Server Side de visible property op valse zet worden ze echt niet gerenderd door asp.net ..

Of niet natuurlijk...


Verwijderd

Topicstarter
giMoz schreef op donderdag 11 mei 2006 @ 08:54:
Je hebt dan in je HTML helemaal niet die 500 radiobuttons.
Als je Server Side de visible property op valse zet worden ze echt niet gerenderd door asp.net ..
Ik heb dat zojuist getest en kwam daar ook al achter. Wilde net vragen of iemand dat kon bevestigen. Probleem lijkt me dan wel opgelost. Bedankt.

Blijf het nog steed raar vinden van .NET dat de control opnieuw aangemaakt moet worden. Ergens in de viewstaat moet toch bekend zijn welke knop er is ingedrukt. Ach misschien weer een leuk projectje. viewstate decoden en op basis daarvan zelf de events triggeren :)

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-02 14:52

gorgi_19

Kruimeltjes zijn weer op :9

En wat moet er dan gebeuren als ViewState uit staat? Of als de viewstate aangepast gaat worden aan de client kant? :)

[ Voor 9% gewijzigd door gorgi_19 op 11-05-2006 09:07 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op donderdag 11 mei 2006 @ 09:07:
En wat moet er dan gebeuren als ViewState uit staat? Of als de viewstate aangepast gaat worden aan de client kant? :)
Geen idee, maar de pagina moet bij een postback toch op een of andere manier weten welke knop er is ingedrukt.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-02 14:52

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op donderdag 11 mei 2006 @ 09:18:
[...]

Geen idee, maar de pagina moet bij een postback toch op een of andere manier weten welke knop er is ingedrukt.
Klopt, door de controlcollection wederom op te bouwen en aan de hand van het event + id wordt de betreffende control weer opgezocht. :) Je krijgt erg leuke effecten als je de controlcollection overhoopt gooid waardoor de controls bij een postback een ander ID krijgen van INamingContainer :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op donderdag 11 mei 2006 @ 09:30:
[...]

Klopt, door de controlcollection wederom op te bouwen en aan de hand van het event + id wordt de betreffende control weer opgezocht. :) Je krijgt erg leuke effecten als je de controlcollection overhoopt gooid waardoor de controls bij een postback een ander ID krijgen van INamingContainer :)
En hoe wordt dat event en id dan meegegeven in de request?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-02 14:52

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op donderdag 11 mei 2006 @ 10:29:
[...]

En hoe wordt dat event en id dan meegegeven in de request?
Aan de hand van de controlcollection wordt de boel opgebouwd; doe een viewsource van je pagina en je weet wat hij terugstuurt tijdens een postback :) Die JS wordt opgevangen :)

Zie dit over de Viewstate
http://www.eggheadcafe.com/articles/20060208.asp

[ Voor 10% gewijzigd door gorgi_19 op 11-05-2006 13:33 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
giMoz schreef op donderdag 11 mei 2006 @ 08:54:
Je hebt dan in je HTML helemaal niet die 500 radiobuttons.
Als je Server Side de visible property op valse zet worden ze echt niet gerenderd door asp.net ..
Oei blijkbaar toch een probjeempje :S

Ben nu al de hele dag bezig met een basispagina, waarin verschillende formfield geladen kunnen worden. Ieder textveld, kan samen met een label in een niew panel. Op basis van de status van de pagina, bekijken of wijzigen, worden sommige van deze panels op visible = false gezet.

Nu blijkt dus dat ie wel voor ieder panel, toch "<div></div>" genereerd. Welliswaar leeg, maar ze nemen wel ruimte in beslag.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-02 14:52

gorgi_19

Kruimeltjes zijn weer op :9

Dan moet je geen Panel maar een PlaceHolder gebruiken.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ok probleem is opgelost. Om een of andere reden voerde ik een functie twee keer uit. Dit gaf een vertekend beeld. Visible wordt ook bij panels niet gerenderd, gelukkig!

Verwijderd

50 waarden, en 10 radiobuttons per waarde? Klinkt als een ideale kandidaat voor Atlas (MS's implementatie van AJAX).
Helaas nog in beta, en niet bepaald optimaal geintegreerd in VS2005, maar toch de moeite waard om 's naar te kijken. Al was 't maar voor de toekomst... :)

Verwijderd

Topicstarter
Verwijderd schreef op donderdag 11 mei 2006 @ 21:16:
50 waarden, en 10 radiobuttons per waarde? Klinkt als een ideale kandidaat voor Atlas (MS's implementatie van AJAX).
Helaas nog in beta, en niet bepaald optimaal geintegreerd in VS2005, maar toch de moeite waard om 's naar te kijken. Al was 't maar voor de toekomst... :)
Ben bekens met AJAX. Heb atlas geprobeerd maar dat vind ik nog erg matig. Heb ik voorlopig dus nog even links laten liggen.
Pagina: 1