Sfondo: Sto personalizzando un'applicazione ASP .NET/C# esistente. Ha il suo piccolo "framework" e le convenzioni che gli sviluppatori devono seguire quando estendono/personalizzano le sue funzionalità. Attualmente sto estendendo alcune delle sue funzionalità amministrative, alle quali il framework fornisce un contratto per imporre l'implementazione del metodo GetAdministrationInterface()
, che restituisce System.Web.UI.Control
. Questo metodo viene chiamato durante il metodo Page_Load()
della pagina che ospita l'interfaccia della GUI.I gestori di eventi ASP .NET Button non vengono attivati al primo clic, ma al secondo clic dopo una PostBack
Problema: Ho tre pulsanti nella GUI, a ognuno dei quali è stato assegnato un gestore di eventi. La mia interfaccia grafica di amministrazione si carica perfettamente, ma fare clic su uno dei pulsanti non fa ciò che mi aspetto che facciano. Tuttavia, quando li clicco una seconda volta, i pulsanti funzionano.
Ho inserito i punti di interruzione all'inizio di ogni metodo del gestore di eventi e ho eseguito il mio codice. Al primo clic, nessuno dei gestori di eventi è stato attivato. Al secondo clic, hanno sparato.
Qualche idea?
Esempio di Button Definizione (entro GetAdministrationInterface
)
public override Control GetAdministrationInterface()
{
// more code...
Button btn = new Button();
btn.Text = "Click Me!";
btn.Click += new EventHandler(Btn_Click);
// more code...
}
Esempio di Event Handler Metodo Definizione
void Btn_Click(object sender, EventArgs e)
{
// Do Something
}
Page_Load
metodo che chiama 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());
}
}
}
Dove si posiziona la vostra definizione pulsante e il gestore di eventi? Come vengono aggiunti i pulsanti alla pagina? –
Pubblica il codice Page_Load che chiama 'GetAdminInterface' e crea i controlli –
Ho aggiunto il codice' Page_Load' alla domanda originale. – John