Hallo zusammen
Eigentlich bin ich ja kein Web-Anfänger, aber diese Woche fühle ich mich wirklich wie einer. Warum? In der Page_Load Funktion sind meine Objekte (statische, keine dynamischen) null. Und daher erhalte ich logischerweise eine NullReferenceException.
Zuerst einmal der Code:
Default.aspx
...
<div id="content">
<cms:NewPageController ID="myNewPageController" runat="server" />
<cms:Login ID="myLoginController" runat="server" />
</div>
...
NewPageController.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="NewPageController.ascx.cs" Inherits="Cms.Web.Admin.Pages.NewPageController" %>
<cms:NewPageDetailForm ID="myNewPageDetailForm" runat="server" />
<cms:NewPageParentChooser ID="myNewPageParentChooser" runat="server" />
<cms:NewPageFieldChooser ID="myNewPageFieldChooser" runat="server" />
NewPageController.ascx.cs
protected void Page_Load(object sender, EventArgs e)
{
myNewPageDetailForm.Controller = this;
myNewPageFieldChooser.Controller = this;
myNewPageParentChooser.Controller = this;
GoToNextStep();
}
Alle Controls sind in den jeweiligen *.ascx.designer.cs deklariert und in den *.ascx files eingebunden. Sind also statische Controls. Mein Verständnis von ASP.NET ist eigentlich, dass diese Controls während des Lifecycle erstellt werden. Bei mir scheint dies aber nun nicht der Fall zu sein - an was könnte das liegen?
Die Exception taucht in der Klasse NewPageController in der Methode Page_Load in der ersten Zeilte auf.
Danke für die Hilfe,
LG Michi
ich bin auch kein profi aber ich denke das liegt am pagelifecycle:
von msdn: http://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events
The Page object calls the OnLoad method on the Page object, and then recursively does the same for each child control until the page and all controls are loaded. The Load event of individual controls occurs after the Load event of the page.
Gemäss Pagelifecycle werden die Controls aber zwischen PreInit und Init erstellt.
Raised after all controls have been initialized and any skin settings have been applied.
Meiner Meinung nach stimmt der Code, könnte das Projekt irgendwie kaputt sein? Ich deploye übrigens nicht via IIS, sondern via VS-integrierten Server.
Salute Michael
Extrahiere mal das notwendige für eine Nachvollziehbarkeit.
Dann machst du ein neues Projekt und baust das Notwendige ein.
Tritt dort der selbe Fehler auf?
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter
Ich habe mal alles in ein Testprojekt extrahiert - und ja, der Fehler tritt immer noch auf. Das Testprojekt habe ich angehängt. Ist ein VS2008 Projekt.
Der Aufruf ist: http://localhost:51139/Admin/NewPage.aspx
Die Logging-Komponente habe ich auch abgehängt, der Fehler tritt aber im NewPageController in der Methode Page_Load auf.
LG Michi
Salute Michael
Ich habe mir das Projekt mal "kurz" angeguckt.
So gesehen würde ich den Fehler auf das Control eingrenzen, erstmal.
Und allgemein: Alles unnötige, potentielle Fehlerquellen entfernen. Aber ohne Url Rewriting gibts nicht mehr wirklich viel......
Ich hoffe das hilft dir ein wenig weiter. Berichte dann.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Hallo Peter
In der Web.config habe ich nun folgende Einträge entfernt:
<system.web>
<pages>
<controls>
<add tagPrefix="cms" namespace="Cms.Web.Admin" assembly="Cms.Web"/>
<add tagPrefix="cms" namespace="Cms.Web.Admin.Pages" assembly="Cms.Web"/>
<add tagPrefix="cms" namespace="Cms.Web.Admin.Templates" assembly="Cms.Web"/>
</controls>
</pages>
</system.web>
Nun registriere ich die Controls auf jeder Page von Hand. So funktioniert es. Sobald ich die Einträge im Web.config wieder hinzufüge, funktioniert es nicht mehr.
Mein Problem ist somit zwar gelöst, aber warum das so ist, verstehe ich nicht...
LG Michi
Salute Michael
Also per Designer reingezogen, oder von Hand reingeschrieben?
Wie sieht diese Registrierung dann aus, die funktioniert?
Hast du im Verzeichnis /Admin/ noch eine andere web.config?
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
Guten Morgen Peter
Im File NewPageController.ascx habe ich folgende Einträge von Hand gemacht:
<%@ Register TagPrefix="cms" TagName="NewPageDetailForm" Src="~/Admin/Pages/NewPageDetailForm.ascx" %>
<%@ Register TagPrefix="cms" TagName="NewPageParentChooser" Src="~/Admin/Pages/NewPageParentChooser.ascx" %>
<%@ Register TagPrefix="cms" TagName="NewPageFieldChooser" Src="~/Admin/Pages/NewPageFieldChooser.ascx" %>
Eine andere Web.config habe ich nicht. Im original-Web.config hatte ich die Einträge auch von Hand gemacht gehabt, aber die haben ja eben nicht funktioniert. Für mich hört sich das irgendwie nach Bug an. Evtl. hat es auch damit zu tun, dass die Einträge im Web.config alle den gleichen Tag-Prefix hatten.
LG Michi
Hoi Michael
Die web.config Einträge sind auf den gesamten Namespace in der genannten Assembly gültig, also für mehrere Controls darin.
Die letzten geposteten, mit denen es funktioniert sind jeweils explizit auf ein Control.
Sieht also eher nach einem Namespace-Konflikt / Namen-Konflikt aus.
Gruss Peter
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011