In een webproject heb ik een derived class van System.Web.UI.Page gemaakt. Hieronder staat een gestripte versie om het probleem duidelijk te maken
Zoals het hier staat werkt alles. De method InitPage() kan ik zonder problemen vanuit form.aspx.cs aanroepen. Als ik echter de code waarin de session uitgelezen wordt verplaats naar de constructor dan krijg ik bij het laden van de pagina een "Object reference not set to an instance of an object" op de regel van de session code.
Ik denk dat komt omdat nu eerst de constructor van de baseclass aangeroepen wordt waarin "iets" gebeurt dat hier mee te maken heeft en dat dat nog niet gebeurd is als de die sessioncode in de constructor van de derived class staat.
Er is makkelijk omheen te werken door die init gewoon zelf aan te roepen maar echt netjes is dat niet. Daarnaast ben ik ook gewoon erg nieuwsgierig naar het waarom.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using PicApi.Classes;
namespace testpicclient.Classes
{
public class CustomPage : System.Web.UI.Page
{
public CustomPage()
{
Version = "1.0.3";
}
public string Version;
public void InitPage()
{
if (System.Web.HttpContext.Current.Session["City"] == null)
Response.Write("No such value in session state.");
}
}
} |
Zoals het hier staat werkt alles. De method InitPage() kan ik zonder problemen vanuit form.aspx.cs aanroepen. Als ik echter de code waarin de session uitgelezen wordt verplaats naar de constructor dan krijg ik bij het laden van de pagina een "Object reference not set to an instance of an object" op de regel van de session code.
Ik denk dat komt omdat nu eerst de constructor van de baseclass aangeroepen wordt waarin "iets" gebeurt dat hier mee te maken heeft en dat dat nog niet gebeurd is als de die sessioncode in de constructor van de derived class staat.
Er is makkelijk omheen te werken door die init gewoon zelf aan te roepen maar echt netjes is dat niet. Daarnaast ben ik ook gewoon erg nieuwsgierig naar het waarom.
[ Voor 3% gewijzigd door Yucon op 24-03-2004 15:15 ]