Quando si crea un controllo Web, è necessario sovrascrivere OnLoad o implementare Page_Load

StackOverflow https://stackoverflow.com/questions/147033

  •  02-07-2019
  •  | 
  •  

Domanda

Quando si crea un nuovo controllo utente Web in Visual Studio, per impostazione predefinita viene aggiunto l'evento Page_Load. Qual è il vantaggio di utilizzare questo piuttosto che sovrascrivere l'evento di base OnLoad sul controllo? È solo che l'evento Page_Load viene generato prima di OnLoad ?

È stato utile?

Soluzione

Il metodo OnLoad dovrebbe essere il luogo in cui viene generato l'evento Load . Personalmente cerco sempre di gestire l'evento a meno che non debba fare ulteriori elaborazioni per sollevare l'evento.

Raccomando di gestire l'evento stesso in circostanze normali.

Altri suggerimenti

Puoi trovare questo articolo sul ciclo di vita della pagina di Microsoft utile.

Come puoi vedere sopra, si tratta principalmente di una scelta personale SE tale scelta è fatta in modo consapevole. La migliore panoramica rapida ma solida che ho visto è su http://weblogs.asp.net/infinitiesloop/archive/2008/03/24/onload-vs-page-load-vs-load-event.aspx

È davvero solo una questione di scelta. A me sembra strano che un oggetto associ un evento a se stesso, specialmente quando esiste un metodo che puoi ignorare.

Penso che il team di ASP.NET abbia usato gli eventi perché quello era il modello di Global.asa in ASP, e per abbassare la barra degli sviluppatori che non capiscono l'ereditarietà e ignorano i metodi virtuali.

Sovrascrivere il metodo richiede maggiori conoscenze sul ciclo di vita della pagina, ma non c'è nulla di "sbagliato". con esso.

Leggi la sezione chiamata: " Eventi pagina di rilegatura " nella pagina MSDN intitolata: " ASP.NET Modello di controllo del server Web " ( link alla pagina ) Ci sono alcune dichiarazioni utili come queste:

  

Uno svantaggio dell'attributo AutoEventWireup è che richiede che i gestori di eventi di pagina abbiano nomi specifici e prevedibili. Ciò limita la tua flessibilità nel modo in cui assegni i gestori di eventi. Un altro svantaggio è che le prestazioni sono influenzate negativamente , poiché ASP.NET cerca i metodi in fase di esecuzione. Per un sito Web con elevati volumi di traffico, l'impatto sulle prestazioni potrebbe essere significativo.

( AutoEventWireup il flag attiva metodi come Page_Load)

Anche se stai ereditando da UserControl , penso che dovresti evitare di ignorare i metodi protetti se non devi. Page_Load è lì per rendere più semplice l'aggiunta del codice specifico per il tuo UserControl .

Sostituisci OnLoad solo se hai bisogno del controllo assoluto su quando (/ if) viene attivato l'evento Load (che dovrebbe essere raro, IMO).

Penso che sia lo stesso. IMHO, Con Eventi, hai un po 'più di flessibilità, perché puoi capitare più di un ascoltatore al tuo evento!

Penso che ci sia una differenza potenzialmente significativa nei due metodi.

Ciò a cui mi riferisco è la capacità di avere il controllo sulla sequenza di esecuzione.

Se stai eseguendo l'override, sai quando avranno luogo le classi di base Load perché le stai chiamando. Ciò fornisce un maggiore controllo, ma probabilmente è una cosa negativa come molti sosterranno.

Se utilizzi un evento, non hai alcuna garanzia in termini di ordine di chiamata. Questo ti costringe a scrivere un evento Load che dovrebbe essere agnostico su cosa stanno facendo le superclasse durante la fase Load. Penso che questo sarebbe l'approccio preferito e forse è per questo che il codice generato automaticamente VS è così.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top