Ich habe versucht, einige nicht-Test-Code zu erstellen, indem Sie eine dritte Teildatei zusätzlich zu MyPage.aspx und MyPage.aspx.cs und MyPage.aspx.designer.cs erstellen. Ich meine dritte Datei MyPage.aspx.TEST.csWarum kann ein Ereignis nicht registriert werden, wenn es Teil einer dritten Teildatei in ASP.NET ist?
genanntIn der Teildatei MyPage.aspx.TEST.cs schrieb ich folgendes:
protected override void OnInit(EventArgs e)
{
Page.LoadComplete += RunTest;
base.OnInit(e);
}
//Assert.
public void RunTest(object sender, EventArgs e)
{
//Clever assertions
}
Der Code kompiliert und ich dann decompile den Code und Da ist es, ich kann die OnInit-Überschreibung und die RunTest-Methode sehen.
Aber wenn ich die Seite ausführen, wird das Ereignis nicht registriert noch ausgeführt, noch kann ich einen Haltepunkt festlegen.
Ich verschiebe diesen Code aus der Teilklasse MyPage.aspx.TEST.cs in die Teildatei MyPage.aspx.cs und die Ereignisregister und wird ausgeführt. Fremder, wenn ich die Assembly dekompiliere und ein Diff mache, scheint die Klasse in denselben Code zu dekompilieren.
Mögliche Hinweise, die in keinem Zusammenhang sein kann:
- Die Seite verwendet AutoEventWireup = „true“ (ich immer noch das gleiche Verhalten, wenn ich versuche, die Veranstaltung auf meine Page_LoadComplete registrieren)
- Die Anwendung ein Web ist Anwendung (ieuses eine proj-Datei)
- Die Teildatei kompiliert (und wenn ich Fehler in die Teildatei einführen, wird es die Kompilierung verhindern, so dass ich sicher weiß, dass die Teildatei kompiliert wird)
- Ich bekomme das gleiche Ergebnis mit verschiedenen Ereignissen (PreRen die, etc)
Bloody ausgezeichnete Frage, und ich habe nicht die nebeligste. – jcolebrand
Haben Sie überprüft, dass Ihre Klassennamen und Namespaces in allen drei partiellen Klassendateien identisch sind? – StriplingWarrior
Ich habe das Problem gefunden, es hat mit der Direktive zu tun - wenn es codeFile = "foo.cs" heißt, kompiliert es nur die zwei Dateien. Wenn es CodeBehind sagt "verhält es sich so, wie es Jupaol gezeigt hat, sollte es. – MatthewMartin