Toon posts:

[vb.net/asp2] Custom control werkt niet in page_load

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem met een zelfgeschreven control.

Ik heb een control geplaatst in mijn aspx pagina. (Picklist/dual listbox)

Als ik hem wil vullen in de page_load, bewaart hij zijn instellingen niet tijdens postbacks.

Als ik hem echter pas vul nadat er op een button geklikt is, doet hij het wel.

Nu ben ik na wat zoeken erop gestuit dat het hier een bugje in het .net2 framework betreft die stelt dat als een Custom Controll aangemaakt wordt voor de page_load event, de viewstate niet bewaard wordt.

Een (niet werkende) fix hiervoor zou zijn:
code:
1
2
3
4
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
(...)
ViewState("picklist1") = ViewState("picklist1")
End sub

Waarmee je zou forceren dat de viewstate ingesteld wordt, maar dat werkt - helaas - niet.

Iemand suggesties over hoe dit te fixen?

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

gorgi_19

Kruimeltjes zijn weer op :9

Wat is nu feitelijk het probleem? Een control moet je tijdens de Init aan de control collection toevoegen (of CreateChildControls overriden)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ik voeg 'm al toe bij
code:
1
<%@ Register TagPrefix="IACT" Namespace="IACT.CustomControls" Assembly="IACT.CustomControls" %>


En verderop in de aspx pagina:
code:
1
<IACT:Picklist runat="server" ID="picklist1" Height="322px" Width="436px" CssClass="formstyle" />


Mijn probleem is dat als ik gegevens aan de control toevoeg tijdens page_load deze niet in de viewstate bewaard worden (en dus bij een postback verdwijnen) en als ik 'm vul door later een event te gebruiken (klik op knopje) het wel werkt:
code:
1
Protected Sub FillPickList(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click


Want ik vind het geen porum dat ik eerst op een knopje/button "lees data" moet klikken ipv dat het gelijk bij openen beschikbaar is.

Verwijderd

Topicstarter
*** schop ***

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:33
check je wel op postbacks ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Ja gewoon if not ispostback dan vul ik 'm....

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23:40
Neem aan dat je control de viewstate wel aan heeft staan? :)

Zoek even op de lifecycle van een pagina in asp.net, ik weet dat er bijvoorbeeld by dynamische controls iets met de volgorde van handelingen aan de hand is.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
En hoe ziet de code van je control eruit?

Verwijderd

Topicstarter
Code van de controll heb ik zo 1-2-3 niet bij de hand, maar het vreemde vind ik dat als ik 'm vul door op een button te klikken, hij het perfect doet, alleen bij page_load niet.

Dingen als viewstate enzo staan wel aan.

Verwijderd

Topicstarter
ZIjn er mensen die wel een custom control aan de praat hebben gekregen in page_load?
(Dus is het een probleem van mij, of van het framework? :))

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23:40
Verwijderd schreef op zaterdag 29 april 2006 @ 14:34:
ZIjn er mensen die wel een custom control aan de praat hebben gekregen in page_load?
(Dus is het een probleem van mij, of van het framework? :))
Krijg je wel de viewstate events? ( zoals hier http://www.15seconds.com/issue/020102.htm staat uitgelegd )

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Voor zover ik weet is dit geen bug.

Op het moment dat je in een Webcontrol de .add() functie aanroept worden er een aantal dingen voor je gedaan, onder andere de subcontrol toevoegen aan de viewstatemanager (trackviewstate method). Op het moment dat jij een control aanmaakt, deze vult met data (subcontrols) en deze toevoegt aan een pagina, zullen de subcontrols van de control niet opgenomen worden in de viewstate manager, omdat jouw control op dat moment nog geen viewstate manager heeft. Wat dus de oplossing is om eerst jou control toe te voegen aan de de pagina: this.controls.add(customControl) en daarna je custom control vullen met data.

Dit is eenvoudig uit te testen met een dropdownlist via de code behind.

Hierbij zal de viewstate niet goed gaan, omdat de listitems niet toevoegt worden aan de viewstatemanger:
code:
1
2
3
4
5
6
7
if Not (Me.IsPostBack) then
begin
dim ddl1 as new DropDownList()
ddl1.items.add("test","test")
ddl1.items.add("test2","test2")
Me.controls.add(ddl1)
end


Dit gaat daarentegen wel goed:
code:
1
2
3
4
5
6
7
if Not (Me.IsPostBack) then
begin
dim ddl1 as new DropDownList()
Me.controls.add(ddl1)
ddl1.items.add("test","test")
ddl1.items.add("test2","test2")
end

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 23:40
Verwijderd schreef op maandag 01 mei 2006 @ 15:24:Wat dus de oplossing is om eerst jou control toe te voegen aan de de pagina: this.controls.add(customControl) en daarna je custom control vullen met data.
Dat verschijnsel bedoelde ik :)

Maar volgens mij maakt hij geen gebruik van dynamische controls maar van een statisch webcontrol.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1