2010-07-27 17 views
6

In ASP.Net ho alcuni controlli personalizzati che ho creato. Ho utilizzato jQuery dove ha anche aiutato. Ebbene, un problema che ho ora (con ovvio, ma soluzioni alternative "cattivo") è che per ogni controllo utente Ho bisogno di eseguire del codice da dentro pageLoad ($(document).ready non funziona con pannelli di aggiornamento).Il modo migliore per gestire javascript all'interno dei controlli personalizzati?

Bene così ora il mio problema. Devo collegare due controlli personalizzati all'evento pageLoad.

Quale sarebbe il modo migliore di fare questo?

Non posso fare

old_pageLoad=pageLoad 
pageLoad=function(){... old_pageLoad();} 

perché questi controlli personalizzati possono essere utilizzati più di una volta su una pagina e lo script deve essere eseguito per ogni singola istanza del controllo, oltre a quello che se ho avuto 3 diversi controlli personalizzati nella pagina?

l'unico metodo che è venuta in mente è qualcosa di simile che sembra super-hacker:

old_pageLoad_<%= MyStaticClass.GetUniqueID() %>=pageLoad; 
pageLoad=function(){... old_pageLoad_<%= MyStaticClass.GetUniqueID() %>();} 

ci sono modi migliori di gestione dei conflitti di funzione come questo?

Ho visto anche this MSDN article ma ciò che suggerisce di fare sembra peggio per me più di quello che sto facendo attualmente.

risposta

1

utilizzare il metodo del ScriptManagerRegisterStartupScript. Si passa un riferimento al proprio controllo durante la registrazione dello script e si assicura che lo script di inizializzazione venga eseguito ogni volta che il controllo viene aggiornato (o sul caricamento della prima pagina o quando viene aggiornato un UpdatePanel).

+0

Sì, ma poi devo trattare il mio javascript come stringhe (nel codebehind) che non significa l'evidenziazione della sintassi e si deve ricorrere a uno concat stringa o sostituzione di stringa da inserire roba lato server – Earlz

+0

@Earlz: Questo è il motivo per cui metti la maggior parte del tuo codice in un file .js esterno e inserisci una semplice chiamata di funzione (eventualmente con argomenti specifici del controllo) nello script per RegisterStartupString. Io uso uno scrittore JS personalizzato per costruire le stringhe degli argomenti, quindi non devo preoccuparmi di eseguire l'escape e quant'altro. –

+0

Cerco di farlo già ma quando ho bisogno di leggere il valore di 10 cose come 10, una funzione è un po 'lunga. – Earlz

0

Un altro modo sarebbe quello di aggiungere un gestore che chiama un metodo JavaScript quando un postback asincrono finisce. L'ho fatto in diverse occasioni per reinizializzare le finestre di dialogo di jQuery. Per esempio.

$().ready(function() { 
    myInitMethod(); 
    Sys.WebForms.PageRequestManager.getInstance().add_endRequest(myInitMethod); 
}); 

function myInitMethod() } 
    // Init code 
} 
Problemi correlati