2 messaggi dal 23 maggio 2001
Ciao,
spero che mi risponderai dopo così tanto tempo dalla pubblicazione.

Hai scritto: "Insomma, ora va molto meglio anche se personalmente continuerò con l'override dei metodi che scatenano gli eventi e la disattivazione della funzione."

Cosa vuol dire che continuerai con l'override dei metodi che scatenano gli eventi? Se io disattivo la funzione di AutoEventWireUp metto la dichiarazione dei delegate degli eventi in una qualche funzione, per esempio supponiamo di avere una pagina che si chiama Login:

public Login() {
this.Load += new EventHandler(Login_Load); }

Ho usato il costruttore perchè, essendo a false il wireup, non sapevo in quale altro posto potessi aggiungere il delegate. Se infatti volessi scrivere del mio codice nell'evento PreInit dove potrei dichiarare il delegate???
Così facendo poi si risolve anche il problema dell'eventuale ereditarietà delle pagina non dalla classe System.Web.UI.Page ma da una pagina base "intermedia", una tecnica che si utilizza spesso in ASP.NET 1.1 per far sì che, per esempio, si esegua uno stesso codice sul load di tutte le pagine (spero di essere stato chiaro...).

Ciao e grazie
Davide
Modificato da fradax il 12 agosto 2005 15.21 -
Gli eventi che intercetti sono definiti nella pagina stessa dalla quale erediti.
Il pattern degli eventi usato nel framework prevedere che un evento "Evento1" abbia un metodo virtual protected "OnEvento1" così da permettere alle classi ereditanti di ridefinire il comportamento dell'evento.
Nelle pagine asp.net quindi per intercettare il load della pagina ti basta fare

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
// tuo codice
}

Richiamando il base manterrai intatto l'evento Load originale e chi vuole dall'esterno (o anche dall'interno) intercettarlo.
E' solo un'altra soluzione e non dico che sia la migliore

Ciao

Il mio blog
Homepage
2 messaggi dal 23 maggio 2001
Ciao, grazie x la risposta...nemmeno tu sei in ferie! ;-)
Il problema non è nel metodo dell'evento, ma nella dichiarazione dell'event handler che permette al metodo di essere eseguito. Se si toglie il flag AutoEventWireup, VisualStudio non ti crea più i delegate in automatico giusto? Quindi vuol dire che da qualche parte dovremo dire che sull'evento X nella nostra pagina deve essere chiamata la nostra funzione MiaPagina_EventoX. Mi chiedo quindi dove andrebbero messe queste dichiarazioni: nel costruttore della classe-pagina? In un metodo che viene sempre richiamato prima che scatti il primo evento? Se ricordi, in VS.NET 2003 queste dichiarazioni venivano messe in quel metodo InitializeComponent che l'editor di VS raccomandava di non toccare... Esiste un metodo simile anche in ASP.NET 2.0 ?
Ciao e grazie

Davide
Modificato da fradax il 13 agosto 2005 12.15 -
Infatti la soluzione che t'ho proposto non usa i delegate ma semplicemente sovrascrive i metodi della classe Page che scatenano i rispettivi eventi.
L'AutoEventWireUp non è una funzione di visual studio. In vs 2003 questo era disabilitato e quindi era necessario creare i delegate (autogenerati come dici te da vs). Con asp.net 2 e con vs 2005 il flag è a true di default e vs non genera più i delegate ma semplicemente genera i metodi
Page_OnEvento...
Quindi se metti a false devi ritornare alla tecnica di vs 2003. O intercetti con i delegate nel costruttore/init (in vs 2003 metteva tutto nell'init perché inseriva anche i delegate per gli eventi di controlli figli), oppure sfrutti la mia soluzione

Ciao

Il mio blog
Homepage

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.