Codice JS in pagine Ajax dentro updatepanel che sparisce al postback

giovedì 21 novembre 2013 - 20.39
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows XP  |  Visual Studio Express  |  MySQL 5.1  |  Firefox  |  Javascript  |  CSS 2.1  |  CSS 3.0

ravalon Profilo | Expert

Salve a tutta la community

Ho un problemino con delle pagine che sfruttano AJAX attraverso un UpdatePanel.

In alcune carico a runtime uno script in JS per il social sharing (ad esempio il codice da includere del famoso AddThis).

Succede che al postback della pagina, quando qualcosa scatena l'aggiornamento dell'updatepanel, i bottoni per il social sharing richiamati dallo script JS spariscono.

Come posso evitare cio' o farli ricaricare ?

Grazie a chi vorrà dedicarmi parte del proprio tempo.

ridaria Profilo | Expert

deduco che ci sia una incompatibilità tra updatePanel e JS in questione.

Fai un test, metti i pulsanti del social sharing, fuori dall'updatePanel e vedi cosa accade.

Ciao
Fammi sapere
Riccardo D'Aria

ravalon Profilo | Expert

Si quello lo avevo capito e so che dipende dal postback....

Ad ogni modo ho provato a fare come dici e il codice risulta visibile anche dopo postback se posto fuori dall' UpdatePanel.

ridaria Profilo | Expert

OK, bravo, quindi il problema è l'update panel.

Devi verificare la compatibilità di questo codice JS con un UpdatePanel.

Molto probabilmente è l'UpdatePAnel che non ammette ciò, o in altre parole c'è incompatibilità.

Non so se lo sai ma gli updatePanel hanno diverse incompatibilità.
Quelle con i componenti di microsoft sono risapute.

Essendo l'UP un pò ostico, come ti ho appena detto, è probabile che non è possibile usare tale js in esso.

Ripeto è probabile, quindi fai delle ricerche approfondite in merito così sai se non puoi usarlo, o se puoi usarlo, ma con degli accorgimenti.


Ciao
Fammi sapere


Riccardo D'Aria

ravalon Profilo | Expert

In rete ho trovato diverse persone che hanno problemi con questo codice specifico...

Il fatto è che io ho provato questo codice di AddThis e casualmente ho beccato subito un codice non compatibile, ma la sezione dove l'ho testato è una sezione che accetta qualsiasi tipo di script incollato dall'utente che viene salvato nel database e poi ricaricato...

... quindi cercando un modo per evitare il problema su questo codice specifico, speravo di evitarlo anche su altri scripts futuri ...

... in sostanza pensavo ci fosse un modo generico per far si che il postback lasciasse in disparte un pezzo di codice a mia scelta per evitare questo problema ... non c'è ??

Se io racchiudo questa parte di codice dentro qualche particolare controllo (non so quale) potrei evitare il postback ?

ridaria Profilo | Expert

>In rete ho trovato diverse persone che hanno problemi con questo
>codice specifico...

come ti avevo anticipato e mi hai confermato, updatePAnel ha delle incompatibilità.
>
>Il fatto è che io ho provato questo codice di AddThis e casualmente
>ho beccato subito un codice non compatibile, ma la sezione dove
>l'ho testato è una sezione che accetta qualsiasi tipo di script
>incollato dall'utente che viene salvato nel database e poi ricaricato...
>
>... quindi cercando un modo per evitare il problema su questo
>codice specifico, speravo di evitarlo anche su altri scripts
>futuri ...
>
>... in sostanza pensavo ci fosse un modo generico per far si
>che il postback lasciasse in disparte un pezzo di codice a mia
>scelta per evitare questo problema ... non c'è ??

no, updatePAnel è fatto apposta per ricevere solo lui il postback, sarebbe un controsenso in termini.

>
>Se io racchiudo questa parte di codice dentro qualche particolare
>controllo (non so quale) potrei evitare il postback ?

non credo.


CMQ come ti avevo anticipato, questi controlli generati da JS hanno delle incompatibilità con JS.

Se basta cosi, chiudi il post.

CIAO fammi sapere se hai notizie



>

Riccardo D'Aria

ravalon Profilo | Expert

Beh, se non vi è soluzione conosciuta la chiudo qui ma a questo punto è quel JS che ha problemi o tutti i JS hanno problemi se dentro un updatepanel ?

andrestu Profilo | Expert

non so se ho capito bene ma secondo me potresti provare due possibili soluzioni:

1- fare in modo che gli elementi che spariscono non vengono aggiornati ad ogni postback, dovresti individuare dove vengono creati dinamicamente questi pulsanti e spostarli all'esterno degli UP, oppure in un UP separato e impostare tutti gli UP come UpdateMode="Conditional"

2- è probabile che i pulsanti spariscono perchè il DOM aggiorna la parte di pagina dove sono presenti quindi devi provare a ricaricarli ad ogni postback, inserisci nella pagina del codice JS come questo

function pageLoad() {
... funzione che carica i pulsanti
};

spero di esserti stato di aiuto...

Andrea Restucci - Web Developer

ravalon Profilo | Expert

Ciao Adnrestu e grazie per il tuo interessamento, almeno mi fornisci delle idee da provare...

Il codice che devo inserire è simile al seguente..

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


...e mi deve essere eseguito in mezzo alla pagina, esattamente al imte_databound di un datalist....

... come posso fare per arrivare al test che mi indichi ? dove la metto la funzione suggerita ?

andrestu Profilo | Expert

mmm in questo caso è probabile che la funzione JS che crea i pulsanti sia cablata all'interno dello script che carichi

<script type="text/javascript" src="...

bisognerebbe trovare la funzione che crea i pulsanti e lanciarla manualmente.
in alternativa prova la soluzione degli UP impostati come Conditional, ne crei due (tutti e due impostati come conditional), in uno ci metti solo il codice dei pulsanti e nell'altro tutto il resto, in questo modo quello con i pulsanti creati dallo script non verrà mai aggiornato

Andrea Restucci - Web Developer

andrestu Profilo | Expert

non uno dentro l'altro ma due separati ...

Andrea Restucci - Web Developer

ravalon Profilo | Expert

Si penso anche io che non posso intercettare la funzione JS in queste condizioni...

La soluzione dei 2 UpdatePanel separati non c'avevo pensato, hai fatto bene a specificare perchè io questa soluzione l'avevo tentata, solamente che li avevo messi annidati per forza di cose...

Purtroppo non posso separare le due parti di codice per la struttura intrinseca della pagina ma testa la tua soluzione funziona !
...anche se non la posso usare...

L'unica cosa che posso fare a questo punto è porre la chiamata a quel codice fuori dall'update panel, in sostanza a inizio pagina e fine pagina... non è bello ma meglio di niente...

Grazie!

ridaria Profilo | Expert


>L'unica cosa che posso fare a questo punto è porre la chiamata
>a quel codice fuori dall'update panel, in sostanza a inizio pagina
>e fine pagina... non è bello ma meglio di niente...


Fai un test, metti i pulsanti del social sharing, fuori dall'updatePanel e vedi cosa accade.
Te lo avevo già detto all'inizio!!

CIAO


>Grazie!

Riccardo D'Aria

ravalon Profilo | Expert

... e io ti ho anche già risposto !!!

ridaria Profilo | Expert

e chiudi il post se hai finito.


Riccardo D'Aria

ravalon Profilo | Expert

Scusa ma tu scrivi tanto per scrivere ?

Ho già accettato la risposta di Andrestu !

andrestu Profilo | Expert

sei sicuro che non forniscono in qualche modo l'accesso alla funzione JS che ti permette di lanciarla manualmente?
a parte questo ci sarebbe un ulteriore tentativo un pò "grossolano" però ti consentirebbe di lasciare il codice all'interno degli UP, dovresti crearti prima del codice JS (penso che con jquery si possa fare più facilmente) che ti permette di caricare nel DOM un tag script dinamicamente, creata questa funzione ad ogni postback la lanci dentro la funzione che ti avevo precedentemente postato...

Andrea Restucci - Web Developer

ravalon Profilo | Expert

Grazie Andrestu, ma l'impegno per una cosa del genere non è giustificabile per l'obiettivo da raggiungere... ho posto il codice fuori dall 'UP...

... a posteriori, forse è la cosa migliore tanto la condivisione viene fatta sulla PAGINA dalla quale si estrae titolo, descriptio etc etc, inutile farla su ogni ITEM di una datalist come avevo fatto...
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5