Antecedentes: Estoy personalizando una aplicación ASP .NET/C existente. Tiene su propio pequeño "marco" y convenciones que los desarrolladores deben seguir al ampliar/personalizar su funcionalidad. Actualmente estoy ampliando parte de su funcionalidad administrativa, a la cual el marco proporciona un contrato para hacer cumplir la implementación del método GetAdministrationInterface()
, que devuelve System.Web.UI.Control
. Este método se llama durante el método Page_Load()
de la página que aloja la interfaz GUI.Los controladores de eventos de ASP .NET Button no se activan en el primer clic, sino que en el segundo clic después de un PostBack
Problema: Tengo tres botones en mi GUI, a cada uno de los cuales se le ha asignado un controlador de eventos. La GUI de mi administración se carga perfectamente, pero hacer clic en cualquiera de los botones no hace lo que espero que hagan. Sin embargo, cuando los hago clic por segunda vez, los botones funcionan.
Puse puntos de interrupción al comienzo de cada método de controlador de eventos y pasé por mi código. En el primer clic, ninguno de los controladores de eventos se activaron. En el segundo clic, dispararon.
¿Alguna idea?
Ejemplo de Botón Definición (dentro GetAdministrationInterface
)
public override Control GetAdministrationInterface()
{
// more code...
Button btn = new Button();
btn.Text = "Click Me!";
btn.Click += new EventHandler(Btn_Click);
// more code...
}
Ejemplo de controlador de eventos Definición de método
void Btn_Click(object sender, EventArgs e)
{
// Do Something
}
Page_Load
método que llama GetAdministrationInterface
protected void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsAsync)
{
List<AdministrationInterface> interfaces = <DATABASE CALL>;
foreach(AdministrationInteface ai in interfaces)
{
placeholderDiv.Controls.Add(ai.GetAdministrationInterface());
}
}
}
¿Dónde ha colocado su definición del botón y el controlador de eventos? ¿Cómo se están agregando los botones a la página? –
Publique el código Page_Load que llama a 'GetAdminInterface' y crea los controles –
Agregué el código' Page_Load' a la pregunta original. – John