Toon posts:

[VS2003] Error bij gebruik van een page template

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer te werken met een page template om code te hergebruiken. De klasse MasterPage erft van System.Web.UI.Page en een WebForm (de codebehind klasse) erft van die MasterPage. In MasterPage heb ik een constructor die een aantal Controls aanmaakt (4 Controls voor ASCX bestanden, en 1 HtmlControl voor het <form> element op de afgeleide pagina, deze zoek ik middels een functie op in de Controls collectie van de pagina). In de MasterPage override ik OnInit, met een aanroep naar BuildPage().

Hierin gebruik ik de functie Add van de HtmlControl om de user controls toe te voegen aan de form. Het compileert zonder fouten en werkt prima als je de pagina bekijkt.

Maar telkens als ik een WebForm open waarvan de classe erachter erft van de MasterPage i.p.v. van de normale System.Web.UI.Page dan krijg ik de volgende foutmelding:
quote: VS2003
The file could not be loaded into the Web Forms designer. Please correct the following error and then try loading it again:

An exception occurred while trying to create an instance of Humanagement.Site.Shared.MasterPage. The exception was "Object reference not set to an instance of an object.".

Make sure all of the classes used in the page are built or referenced in the project. Click Help for more information.

  • r5d
  • Registratie: Februari 2002
  • Niet online

r5d

Read more, write less...

"Object reference not set to an instance of an object."
Een NullPointer, blijkbaar heb je e.o.a klasse niet geinstantieerd. Misschien masterpage? Dump anders de code eens hier, kunnen we kijken waar die nullpointer optreed.

Later betaal je meer, maar dan heb je wel een gratis datalimiet....


Verwijderd

Topicstarter
Maar hoe kan het dan dat de code wel gewoon werkt als ik de pagina laad (en ik krijg tijdens compileren ook geen foutmeldingen)?
Hier is een simpele versie die de error ook veroozaakt (maar die dus wel compileert en in de browser werkt):

Test.ascx
XML:
1
<asp:Label id="lblTest" runat="server"></asp:Label>
Test.ascx.cs
C#:
1
2
3
4
5
6
7
8
9
10
11
namespace Localhost {
    public class Test : System.Web.UI.UserControl   {
        protected System.Web.UI.WebControls.Label lblTest;

        private void Page_Load(object sender, System.EventArgs e) {
            lblTest.Text = System.DateTime.Now.Year.ToString();
        }

        #region Web Form Designer generated code
    }
}
MasterPage.cs
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace Localhost {
    public class MasterPage : System.Web.UI.Page {
        protected Control Test;

        public MasterPage() {
            Test = LoadControl("~/Test.ascx");
        }

        protected override void OnInit(EventArgs e) {
            Controls.Add(Test);
            base.OnInit(e);
        }
    }
}
WebForm1.aspx
C#:
1
2
3
4
5
6
7
8
9
namespace Localhost {
    public class WebForm1 : Localhost.MasterPage {
        private void Page_Load(object sender, System.EventArgs e) {
            // Put user code to initialize the page here
        }

        #region Web Form Designer generated code
    }
}

[ Voor 76% gewijzigd door Verwijderd op 06-01-2006 19:10 ]


  • r5d
  • Registratie: Februari 2002
  • Niet online

r5d

Read more, write less...

Heb je wel een instantie van dat label aangemaakt? Probeer regel 6 eens toe te voegen.

Test.ascx.cs
C#:
1
2
3
4
5
6
7
8
9
10
11
12
namespace Localhost {
    public class Test : System.Web.UI.UserControl   {
        protected System.Web.UI.WebControls.Label lblTest;

        private void Page_Load(object sender, System.EventArgs e) {
                        lblTest = new System.Web.UI.WebControls.Label();
            lblTest.Text = System.DateTime.Now.Year.ToString();
        }

        #region Web Form Designer generated code
    }
}

Later betaal je meer, maar dan heb je wel een gratis datalimiet....


Verwijderd

Topicstarter
Nee dat had ik niet, omdat volgens mij de aspx-pagina dat impliciet doet (door de declaratie van een <asp:Label/>). Ik het voor de zekerheid toch erbij gezet, maar de foutmelding blijft...