Toon posts:

[ASP.NET] Object reference fout

Pagina: 1
Acties:

Verwijderd

Topicstarter
Bij het oproepen van een sommige apsx pagina's (in debug mode) krijg ik volgende foutmelding:
Object reference not set to an instance of an object
bij dit soort code
code:
1
this.Button1.Click += new System.EventHandler(this.Button1_Click);

of
code:
1
this.lblTitle.Text = "blaat";

Het probleem zit echter niet in de code want op andere PC's werkt deze pagina wel. Het probleem doet zich ook op andere pagina's voor (bv bij het opvullen van labels) en kan soms opgelost worden door in designview de betreffende webcontrol te dubbelklikken zodat je in de corresponderende codeblok terechtkomt. Kan dit probleem te maken hebben met Visual Studio?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Als het probleem 'm niet in de code zit, dan hoort dit eigenlijk niet in P&W Thuis.

Echter, ik snap niet wat je bedoeld met 'op andere pc's werkt dit wel'.
Een ASP.NET pagina wordt op de server uitgevoerd, dus als je die pagina vanaf pc1 of vanaf pc2 bezoekt, het is dezelfde computer (server) die de pagina uitvoert.

Blijkbaar verwijst je control (Button1, lblTitle, .... ) op dat moment naar null, en niet naar een instance van Button of Label.
Controleer ff of je wel overal je control's 'ge-newed' hebt. (Button1 = new Button() ).

https://fgheysels.github.io/


Verwijderd

Topicstarter
Met 'op andere pc's werkt dit wel' bedoel ik dat wanneer dezelfde code op een andere PC geopend en uitgevoerd wordt vanuit VS geen problemen geeft.

Het 'newen' van de controls lost het probleem wel op.
Code gegenereerd door VS zelf
code:
1
protected System.Web.UI.WebControls.Button Button1;

Met new erbij
code:
1
protected System.Web.UI.WebControls.Button Button1 = new Button();

Het probleem doet zich echter (op dezelfde pagina) bij sommige controls wel en bij andere niet voor terwijl de code identiek is.
Is het dus nodig om de door VS gegenereerde code zelf telkens aan te vullen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
VS.NET moet die code echter wel zelf genereren.

Als je kijkt in de door VS.NET gegenereerde code, zal je een InitializeComponent method zien staan, waar het 'newen', en initializeren gebeurt.
Kijk eens of die method wel aangeroepen wordt in de OnInit, en of alle nodige statements in die InitializeComponent method staan. Misschien heeft VS.NET er wel zitten in prutsen.

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
whoami schreef op 23 december 2003 @ 11:53:
VS.NET moet die code echter wel zelf genereren.

Als je kijkt in de door VS.NET gegenereerde code, zal je een InitializeComponent method zien staan, waar het 'newen', en initializeren gebeurt.
Kijk eens of die method wel aangeroepen wordt in de OnInit, en of alle nodige statements in die InitializeComponent method staan. Misschien heeft VS.NET er wel zitten in prutsen.
Volgens mij moet dat helemaal niet gebeuren. De werkelijke aspx pagina inherit namelijk alles van de codebehind class. De code behind class hoeft ze alleen te declareren en de template class ( De aspx file ) instantieert de objecten. Alleen als je zelf met dynamische controls gaat werken moet je ze zelf instantieren.

Als het over windows forms had gegaan heb je natuurlijk wel gelijk.

In .net 2.0 wordt dit princiep trouwens weer anders aangepakt. Hier wordt niet meer gebruik gemaakt van Code beside.
Dit is gebaseerd op Partial types en de aspx pagina erft dus niet meer maar vormt samen met de code beside de volledige class. In je code beside file hoef je dan dus ook niet meer je Controls te declareren.

edit:

om nog even wat over het probleem van de topic starter te zeggen: Als het probleem soms opgelost wordt door in de design view op een control te drukken zodat je in zijn event handler terecht komt komt het mischien dus doordat deze controls niet in je codebehind zijn gedeclareert of staat in je aspx file je ID niet goed ofzo. Het lijkt me ieder geval sterk dat het met exact dezelfde code op de enen computer wel werkt en op de andere niet. Als dit wel het geval is is er denk iets mis met je installatie van het .net framework

[ Voor 19% gewijzigd door Woy op 23-12-2003 16:21 ]

“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 23 december 2003 @ 16:19:
[...]
Als dit wel het geval is is er denk iets mis met je installatie van het .net framework
Inderdaad, een herinstallatie van het .net framework bleek de oplossing te zijn.
Pagina: 1