Estaba intentando agregar algún código de prueba que no sea de producción creando un tercer archivo parcial además de MyPage.aspx y MyPage.aspx.cs y MyPage.aspx.designer.cs. Llamé a mis terceros MyPage.aspx.TEST.cs archivos¿Por qué un evento no se puede registrar cuando forma parte de un tercer archivo parcial en ASP.NET?
En los MyPage.aspx.TEST.cs de archivos parciales, escribí lo siguiente:
protected override void OnInit(EventArgs e)
{
Page.LoadComplete += RunTest;
base.OnInit(e);
}
//Assert.
public void RunTest(object sender, EventArgs e)
{
//Clever assertions
}
El código se compila y luego descompilar el código y allí está, puedo ver la anulación de OnInit y el método RunTest.
Pero cuando ejecuto la página, el evento no se registra, ni se ejecuta, ni puedo establecer un punto de interrupción.
Muevo ese código fuera de la clase parcial MyPage.aspx.TEST.cs en el archivo parcial MyPage.aspx.cs y el evento se registra y se ejecuta. Extraño, cuando descompilo el ensamblado y hago un diff, la clase parece descompilarse en el mismo código.
pistas posibles que pueden no estar relacionadas:
- la página utiliza AutoEventWireup = "true" (sigo teniendo el mismo comportamiento si intento registrar mi caso mi Page_LoadComplete)
- La aplicación es una web aplicación (es decir, utiliza un archivo de proyecto)
- El archivo parcial se compila (y si introduzco errores en el archivo parcial, evitará la compilación, por lo que estoy seguro de que el archivo parcial sí se compila)
- Me sale el mismo resultado usando diferentes eventos (PreRen der, etc.)
Excelente pregunta sangrienta y no tengo la menor idea. – jcolebrand
¿Ha comprobado que los nombres de clase y los espacios de nombres son exactamente los mismos en los tres archivos de clase parcial? – StriplingWarrior
Encontré el problema, tiene que ver con la directiva, si dice codeFile = "foo.cs" compila solo los dos archivos. Si dice codeBehind "se comporta como Jupaol demostró que debería. – MatthewMartin