[ASP.net] FindControl na dynamisch laden in UpdatePanel

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • F e r o x
  • Registratie: Mei 2006
  • Laatst online: 18-11-2024
Enkele User Controls worden dynamisch geladen in een UpdatePanel. Dus niet tijdens de page load. Dit gaat perfect. Maar wanneer ik hierna nu een functie in de code-behind activeer door middel van een trigger (ASyncPostBack) dan worden de geladen controls niet gevonden (updatepanel.ContentTemplateContainer.Controls.Count is gelijk aan 0).

Ik heb al gemerkt dat heel wat mensen dit probleem reeds gehad hebben, maar een echte oplossing vind ik maar nergens.

Acties:
  • 0 Henk 'm!

  • defcon84
  • Registratie: September 2009
  • Laatst online: 19-09 07:46

defcon84

Multipass?

heb je UpdatePanel.FindControl() al geprobeerd?

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 16:10
Zoals ik begrepen heb van deze blog post moet je, als je dynamisch controls toevoegd aan je pagina, er altijd voor zorgen dat tijdens een postback deze opnieuw aangemaakt worden.

Ook het UpdatePanel/ASyncPostback zal een postback/callback veroorzaken en daarin moet je dus de dynamische controls weer aanmaken.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • F e r o x
  • Registratie: Mei 2006
  • Laatst online: 18-11-2024
urk_forever schreef op dinsdag 07 december 2010 @ 12:56:
Zoals ik begrepen heb van deze blog post moet je, als je dynamisch controls toevoegd aan je pagina, er altijd voor zorgen dat tijdens een postback deze opnieuw aangemaakt worden.

Ook het UpdatePanel/ASyncPostback zal een postback/callback veroorzaken en daarin moet je dus de dynamische controls weer aanmaken.
Ja, inderdaad. Na de postback bestaan de dynamische controls niet meer. Maar op welke manier kan je deze efficiënt heropbouwen? Je kan moeilijk ze al op voorhand in de Page_init van de aspx-pagina plaatsen als je nog niet weet welke geladen zullen worden.

Acties:
  • 0 Henk 'm!

  • The_Ghost16
  • Registratie: Januari 2004
  • Laatst online: 19-05 10:05
Plaats de controls die geladen moet worden in een session variabele en lees deze uit in de page_init.

Acties:
  • 0 Henk 'm!

  • urk_forever
  • Registratie: Juni 2001
  • Laatst online: 16:10
Wij kunnen natuurlijk niet in jouw code kijken. Jij zal zelf iets moeten maken waarmee je bij kan houden welke controls je aan moet maken. Bijvoorbeeld zoals The_Ghost16 aangeeft door de dynamische control in de sessie op te slaan, maar misschien is er in jouw geval een andere/betere oplossing, dat zul je toch echt zelf moeten bedenken.

Hail to the king baby!


Acties:
  • 0 Henk 'm!

  • defcon84
  • Registratie: September 2009
  • Laatst online: 19-09 07:46

defcon84

Multipass?

nooooo!!!!!! echt niet in session duwen!!! |:( 8)7 |:( }:O

je moet gewoon een manier vinden om de controls te rebuilden met de juiste id's
bijvoorbeeld door net genoeg data in een hidden field te steken en dan de controls opnieuw te added in de page_init (dus voor de viewstate geladen is) via Request.Form["hiddenfieldname"]
als je dat daar doet en het de correcte id's hebt gegeven, dan zal de viewstate automagisch je values terug invullen en kan je die later in de pagecycle terug uitlezen..

edit:
in asp.net 2.0 en later is het blijkbaar niet meer verplicht om je updatepanel te rebuilden in de page_init
en mag het ook nadat de viewstate is geladen 8)

[ Voor 19% gewijzigd door defcon84 op 07-12-2010 17:04 ]


Acties:
  • 0 Henk 'm!

  • Face_-_LeSS
  • Registratie: September 2004
  • Niet online
Als het om een vast aantal controls gaat dan zou ik 1aanraden om met de Visible property van de controls te spelen om de control al dan niet te tonen. Dat scheelt nogal in complexiteit van je code en qua performance merk je daar niets van. Als dat niet het geval is dan zul je info over de dynamische controls moeten bewaren zodat tijdens postback de control-tree weer opgebouwd kan worden.

Als het heropbouwen van de control-tree essentieel is voor de functionaliteit van de pagina/control dan is niet de ViewState maar de ControlState het juiste middel om die info op te slaan.

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
F e r o x schreef op dinsdag 07 december 2010 @ 15:21:
[...]
Ja, inderdaad. Na de postback bestaan de dynamische controls niet meer. Maar op welke manier kan je deze efficiënt heropbouwen? Je kan moeilijk ze al op voorhand in de Page_init van de aspx-pagina plaatsen als je nog niet weet welke geladen zullen worden.
Dit soort dingen is nou precies waarom je UpdatePanels moet vermijden. Heel Webforms is eigenlijk niet voor dit soort scenario's ontworpen en de UpdatePanels zijn niets meer of minder dan een vuile hack om de hele architectuur en idiologie (min of meer) werkend te houden.

Kijk liever eens kritisch naar hoe e.e.a. in elkaar steekt, en of je eigenlijk niet stiekem bezig bent dingen via een web form (aspx) te doen, die je veel beter met clientside templating en het direct aanspreken van (json) services zou kunnen bereiken. (Zou daarnaast ook een aardige hoeveelheid data verbruik en server belasting moeten schelen.)

(Overigens heeft Microsoft het hele 'asp.net ajax toolkit' gebeuren de facto dood verklaard, dus ik hoop niet dat je nu nog met nieuwe ontwikkeling er in bezig bent: het is er nog voor de backwards compatibility, maar elk 'nieuw' gebruik ervan zou eigenlijk ontmoedigd moeten worden.)

Acties:
  • 0 Henk 'm!

  • F e r o x
  • Registratie: Mei 2006
  • Laatst online: 18-11-2024
Het moet aansluiten bij een bestaand systeem met User Controls. Vandaar dus dat UpdatePanel zowat de enigste mogelijkheid is. Heb al JSON gebruikt om User Controls in te laden op een pagina, maar de omgekeerde richting om deze controls ingevuld met data te verzenden naar de server is niet zo vanzelfsprekend.

Acties:
  • 0 Henk 'm!

  • defcon84
  • Registratie: September 2009
  • Laatst online: 19-09 07:46

defcon84

Multipass?

F e r o x schreef op dinsdag 07 december 2010 @ 19:38:
Het moet aansluiten bij een bestaand systeem met User Controls. Vandaar dus dat UpdatePanel zowat de enigste mogelijkheid is. Heb al JSON gebruikt om User Controls in te laden op een pagina, maar de omgekeerde richting om deze controls ingevuld met data te verzenden naar de server is niet zo vanzelfsprekend.
ik heb je toch net uitgelegd hoe je die waardes terug kan uitlezen.. :F

Acties:
  • 0 Henk 'm!

  • F e r o x
  • Registratie: Mei 2006
  • Laatst online: 18-11-2024
defcon84 schreef op woensdag 08 december 2010 @ 09:13:
[...]

ik heb je toch net uitgelegd hoe je die waardes terug kan uitlezen.. :F
Het gaat over Ajax in samenwerking met JSON. Niet over het heropbouwen ivm. UpdatePanels.
Pagina: 1