Woo, ho un doozy di un problema (potrebbe anche essere uno per il Daily WTF) e spero che ci sia una soluzione. (Le mie scuse per il lungo post ...)Alternativa a Page_Load in ASP.NET (e una buona storia WTF)
Ho lavorato a un sito web che ho ereditato circa un mese fa. Una delle parti su cui ho lavorato è quella di correggere uno dei controlli (essenzialmente una barra di intestazione dinamica) in modo che mostri informazioni aggiuntive come richiesto dai miei utenti. Come parte di questo progetto, ho creato un file Site.master in modo che non avrei dovuto ricodificare la barra dell'intestazione in ogni singola pagina. Quando ho iniziato a farlo, sembrava che funzionasse molto bene. Tutte le pagine che avevo sviluppato erano fantastiche e la barra aggiornata come dovrebbe mostrare le informazioni come dovrebbe.
Bene, quando ho eliminato Site.master (e questo controllo) in pagine del sito più vecchie (quelle che non sviluppavo in modo specifico) ho notato che su alcuni di essi sembrava non corretto, ma non tutti. Quando dico che sembrava male, in pratica, il controllo sarebbe rimasto allineato alla pagina anziché al centro come avrebbe dovuto. Ho passato un paio di ore di debug senza alcun risultato - il CSS sembrava corretto, l'HTML sembrava essere a posto, non ho visto nulla nel Javascript (anche se mi è mancato qualcosa che indicherò in un secondo), e persino il vecchio codice sembrava corretto (al meglio che poteva - non è scritto molto bene). Un altro collega ha dato un'occhiata al sito e non è riuscito a trovare nulla all'inizio.
Non è stato fino a quando ho pensato di guardare il codice sorgente della pagina reso (avevo lavorato nella vista sviluppatore fino a questo punto in IE8) che è diventato chiaro cosa c'era di sbagliato.
Lo sviluppatore originale esegue ricerche su molte pagine. Per fare ciò, interroga il database per TUTTI i dati e li carica in array di Javascript all'interno della pagina in modo che possa accedervi. Questo di per sé è un grosso problema perché stiamo parlando di migliaia di articoli, e ovviamente non è scalabile (e, sì, il sito è lento). Tuttavia, ha finalmente fatto clic su cosa stava rovinando il Site.master - quando carica i dati negli array Javascript, scrive i dati nell'HTML su Page_Load utilizzando numerose chiamate Response.Write (stringa). Il WTF (e quello che mi stava facendo incazzare) è che lui inserisce il Javascript prima del DOCTYPE, facendo sì che IE entri in modalità quirks!
Quindi, perché ho bisogno di ottenere almeno questo rilascio (risolverò il problema reale più tardi), mi chiedevo: c'è un modo per forzare questo Javascript ad essere inserito altrove nell'HTML — dopo il DOCTYPE per lo meno? Al momento, tutte le chiamate Response.Write() vengono eseguite nel metodo Page_Load. Ho solo bisogno che vengano inseriti più tardi.
+1 - abbiamo pubblicato * lo stesso secondo *, ma la tua risposta è migliore :) –
Grazie, in realtà ho riformulato anche questo, perché tecnicamente Page.ClientScript è il modo "migliore" e giusto per farlo ... –