Toon posts:

[ASP.NET] Event voor OnLoad?

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

Verwijderd

Topicstarter
Ok, probleem: k heb een simpele pagina in ASP.NET geschreven die in de onLoad wat waarden uit de db leest en weergeeft. Nu heb ik een control toegevoegd die een event genereerd waarna de db moet worden aangepast. Het probleem is echter dat deze event na de (postback) OnLoad wordt aangeroepen. Je nieuwe pagina zal dus de waarden uit de db laten zien zoals ze vlak voor de event waren... Het is me echter nog niet echt duidelijk hoe je dit dan 'hoort' te doen. Hoe doen de ASP.NETende tweakers dit soort dingen??

(als het nog niet helemaal duidelijk is check dan ook deze vraag van iemand anders met hetzelfde probleem (helaas zonder antwoord)

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

gorgi_19

Kruimeltjes zijn weer op :9

Ik gok
code:
1
2
3
4
If not Page.IsPostBack Then
    ddlCountry.Datasource = HierbijvJeSqlDataReader
    ddlCountry.Databind()
End if

Maar ik snap je vraag niet. .Heb je wat code?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Het event voor OnLoad is OnInit, maar ik zou 't idd (waarschijnlijk) ook met de IsPostBack-property oplossen.

Verwijderd

Topicstarter
Oh, ik zie net een sample ergens die het al duidelijk maakt, best simpel eigenlijk... truuk is dus dat je in de onLoad alleen de eerste keer (!IsPostback) de data uit de db wilt halen, en vervolgens bij postbacks de data in de event zelf maar weer moet binden...Is niet zo handig eigenlijk, dat betekend namelijk dat je dit in al je event handlers moet doen, ookal veranderd zo'n even handler helemaal niets aan de data... Had het toch mooier gevonden als het ook mogelijk geweest was om events voor de onLoad uit te voeren... Maar goed, voorlopig kan ik weer verder, maar als iemand nog betere suggesties heeft dan hoor ik die graag!

zie trouwens voorbeeld, hier wordt BindGrid dus ook in de delete handler aangeroepen...Maar wat als je ook nog andere event handlers zou hebben waarvan een aantal niets met de hele datagrid doen, doe moeten dan ook BindGrid aanroepen...Niet zo handig mi

Verwijderd

en vervolgens bij postbacks de data in de event zelf maar weer moet binden
Je kunt al dan niet gebruik maken van de Viewstate om data te "bewaren" tussen posts.
Het belangrijkste nadeel van de Viewstate vind ik echter dat je je data 2x op je pagina hebt staan en dat bij veel data het inladen van de pagina dus (2x) langer duurt...

Zoals je 't nu beschrijft, haal je steeds opnieuw de data uit de db; da's dus niet nodig als je 't in de Viewstate bewaart.
De Viewstate is een soort van "hidden" formfield die meegepost wordt...

Edit:
Maar wat als je ook nog andere event handlers zou hebben [...]
...die zou je toch ook client-side kunnen afhandelen dan? :)

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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 01 november 2002 @ 21:31:
zie trouwens voorbeeld, hier wordt BindGrid dus ook in de delete handler aangeroepen...Maar wat als je ook nog andere event handlers zou hebben waarvan een aantal niets met de hele datagrid doen, doe moeten dan ook BindGrid aanroepen...Niet zo handig mi
:? De bindgrid wordt aangeroepen omdat om je data feitelijk is veranderd en dus herlezen moet worden en de control opnieuw gebind moet worden. Als je dit niet doet, dan blijft je datagrid in de initiele staat (en zie je ook nog de verwijderde data staat; de datagrid is niet geupdated)

Neem maar eens een hele simpele pagina, zet hier een datagrid op, gebruik een Postback check in je Page_load event. Gebruik vervolgens een submitlink / button /whatever, van deze af met een eventhandler (en zorg dat deze leeg is). Zul je zien dat je datagrid gewoon blijft staan.

Kortom: als een event niets met je datagrid doet en je gebruikt een postback, dan zul je normaal gesproken je 'oude' datagrid terugkrijgen.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Verwijderd schreef op 01 november 2002 @ 21:47:
[...]

Je kunt al dan niet gebruik maken van de Viewstate om data te "bewaren" tussen posts.
Het belangrijkste nadeel van de Viewstate vind ik echter dat je je data 2x op je pagina hebt staan en dat bij veel data het inladen van de pagina dus (2x) langer duurt...

Zoals je 't nu beschrijft, haal je steeds opnieuw de data uit de db; da's dus niet nodig als je 't in de Viewstate bewaart.
De Viewstate is een soort van "hidden" formfield die meegepost wordt...
Als je niet zo veel data hebt zou dat wel kunnen, maar als ik tig records op een pagina ga laten zien, ga ik die niet allemaal als hidden fields in mn pagina zetten (lees Viewstate gebruiken), dan doe ik wel gewoon opnieuw die query
Edit:

[...]

...die zou je toch ook client-side kunnen afhandelen dan? :)
In sommige gevallen wel, in sommige gevallen niet, als je bijv ergens op je pagina een knop hebt om de titel 10x zo groot weer te geven, dan doe je een postback en moet je dus in de eventhandler dus weer vrolijk BindData() aanroepen (terwijl de event op zich dus niets met de data te maken heeft)...jammer...

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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 01 november 2002 @ 21:58:
In sommige gevallen wel, in sommige gevallen niet, als je bijv ergens op je pagina een knop hebt om de titel 10x zo groot weer te geven, dan doe je een postback en moet je dus in de eventhandler dus weer vrolijk BindData() aanroepen (terwijl de event op zich dus niets met de data te maken heeft)...jammer...
Volgens mij is dit een beetje onzin.. Althans, bij de meeste controls... Ga het zo wel ff uittesten... (ff Idols afkijken.. :P )

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op 01 november 2002 @ 22:02:
[...]

Volgens mij is dit een beetje onzin.. Althans, bij de meeste controls... Ga het zo wel ff uittesten... (ff Idols afkijken.. :P )
Doe maar rustig aan want een klein testje lijkt inderdaad aan te geven dat je gelijk hebt...Hmmm, hoe ik dan dit idee heb gekregen is me dan een raadsel :? 8)7

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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 01 november 2002 @ 22:13:
[...]


Doe maar rustig aan want een klein testje lijkt inderdaad aan te geven dat je gelijk hebt...Hmmm, hoe ik dan dit idee heb gekregen is me dan een raadsel :? 8)7
Dus ik neem aan dat het testje nu niet meer nodig is... :+

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • sds
  • Registratie: Juni 2002
  • Laatst online: 28-08 19:06

sds

Kortom: als een event niets met je datagrid doet en je gebruikt een postback, dan zul je normaal gesproken je 'oude' datagrid terugkrijgen.
Als je ViewState gebruikt klopt dat. Een DataGrid haalt automatisch z'n data uit de ViewState als die aanstaat maar als je die uitzet dan moet je altijd opnieuw binden anders krijg je gewoon een leeg grid. ViewState is erg makkelijk en staat ook bij alle controls en pages standaard aan maar kan je pagina's wel groot maken, vooral met zoiets als een DataGrid als er data aan wordt gehangen.
Het is heel simpel, een pagina wordt altijd compleet opnieuw opgebouwd bij elke postback, je begint weer met een lege pagina, de DataGrid wordt opnieuw gecreerd en je zult dus ook zelf de data weer moeten ophalen (database of session) en weer moeten binden (tenzij je dus de viewstate aan hebt staan).

Verwijderd

Conclusie:
- Als je per pagina vaak en weinig data ophaalt -> ViewState gebruiken (want scheelt je een roundtrip naar de database)
- Als je per pagina soms en veel data ophaalt -> Geen ViewState gebruiken (want pagina wordt anders tenminste 2x zo groot), maar gewoon steeds opnieuw een BIndData().

Maar wat nu als je soms en weinig (hmmm... dan ook gewoon ViewState gebruiken!) of vaak en veel data ophaalt? De Cache gebruiken, zou dan een oplossing kunnen zijn als de betreffende data niet vaak verandert.

Dus: Wat nu als je vaak, veel en snel wisselende data op moet halen?

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

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 02 november 2002 @ 13:16:
Conclusie:
- Als je per pagina vaak en weinig data ophaalt -> ViewState gebruiken (want scheelt je een roundtrip naar de database)
- Als je per pagina soms en veel data ophaalt -> Geen ViewState gebruiken (want pagina wordt anders tenminste 2x zo groot), maar gewoon steeds opnieuw een BIndData().

Maar wat nu als je soms en weinig (hmmm... dan ook gewoon ViewState gebruiken!) of vaak en veel data ophaalt? De Cache gebruiken, zou dan een oplossing kunnen zijn als de betreffende data niet vaak verandert.

Dus: Wat nu als je vaak, veel en snel wisselende data op moet halen?
Je mist een klein detail.. Je kan ook een viewstate per control instellen... :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1