Chiamate Ajax senza UpdatePanel non funzionano con Firefox, perchè?!?!...

lunedì 09 giugno 2008 - 10.43

lukepet Profilo | Junior Member

Ho una pagina aspx in cui le chiamate Ajax sono gestite manualmente senza ricorrere all'updatepanel.

La pagina è implementata nel seguente modo:

<%@ Page Language="VB" MasterPageFile="~/masterpages/DueColonne.master" AutoEventWireup="false" CodeFile="CatalogoArticoli.aspx.vb" Inherits="CatalogoArticoli" title="Catalogo Articoli" EnableEventValidation="false" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolderSx" Runat="Server" Visible="true">

<script type="text/javascript" src="../js/components/Catalogo.js" ></script>

<div id="selezione-catalogo" >

<div id="buttonselezione">
<asp:Button ID="btnApriCat" runat="server" Text="Mostra" onmouseover="this.className='btTipo3_Over'" onmouseout="this.className='btTipo3'" CssClass="btTipo3" />
<asp:Button ID="btnAzzera" runat="server" Text="Azzera" onmouseover="this.className='btTipo3_Over'" onmouseout="this.className='btTipo3'" CssClass="btTipo3" />
</div>
</div>

</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolderDx" Runat="Server">


<div id="div-catalogo">
<asp:Label ID="lblErrore" runat="server" Visible="false" CssClass="lblErrore" />
<asp:Label ID="lblDescrizione" runat="server" />
</div>

<div style="height: 50px;">
<div style="position: relative; float: right; clear: left;">
<asp:Label ID="lblElementi" runat="server" CssClass="labelPag" />
</div>
<div id="indici" runat="server" class="divPag" ></div>
</div>

<br />
<asp:Label ID="Vuoto" CssClass="Vuoto" runat="server" Visible="false" />

<script type="text/javascript">

function injectComboSelBehaviors() {

var objCatalogo = new CatOrdiniWeb('ctl00$ContentPlaceHolderSx$btnApriCat', 'div-catalogo');

}

Sys.Net.WebRequestManager.add_invokingRequest(onInvoke);
Sys.Net.WebRequestManager.add_completedRequest(onComplete);

function onInvoke(sender, args)
{
InizioAttesa();
}

function onComplete(sender, args)
{
FineAttesa();
}

function pageUnload()
{
Sys.Net.WebRequestManager.remove_invokingRequest(onInvoke);
Sys.Net.WebRequestManager.remove_completedRequest(onComplete);
}

</script>

</asp:Content>

Quando si clicca sul bottone btnApriCat la pagina dovrebbe caricare in modalità Ajax dei contenuti all'interno del div "div-catalogo".

Quello che non riesco a capire è come mai questa soluzione funziona correttamente su Internet Explorer mentre su Firefox no.

Forse c'è qualche dettaglio implementativo che non viene riconosciuto da firefox...non so. Qualche suggerimento?

Wamba Profilo | Expert

Non ho capito come intercetti lato js l'onclick del pulsante, tramite un $addHandler?
Il problema potrebbe essere la differente propagazione degli eventi fra IE e FF. Se c'è una lista di funzioni che devono rispondere all'evento "click" del pulsante IE affronta la lista in un ordine e FF nel verso opposto.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

lukepet Profilo | Junior Member

praticamente ho questa definizione:

CatOrdiniWeb = function ( btnVisualizzaId, divCatalogoId){

this.btnVis = $get(btnVisualizzaId);

this.initializeBehavior();

}

e poi ho

CatOrdiniWeb.prototype = {

initializeBehavior: function() {
(this.btnVis != null) ? (this.btnVis.onclick = function(){.......}) : (this.btnVis=null) ;
}
}

è corretta questa struttura?

Wamba Profilo | Expert

Non sono espetto di behaviour ma sembra essere tutto ok.

this.btnVis.onclick = function(){.......}
Potresti estrarre dai puntolini il momento della postback?
credo inoltre che tu possa aggiungere 2 parametri a function(){...} che dovrebbero essere (event, args).
Una delle possibili soluzioni, ammesso che le mie supposizioni siano giuste sul modo con cui fai la postback:
event.preventDefault();
event.stopPropagation();
Questo ferma la propagazione dell'evento a gli altri handler e al "default" del browser.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

lukepet Profilo | Junior Member

Facendo alcune ricerche ho trovato questo post: http://forums.whirlpool.net.au/forum-replies-archive.cfm/573157.html

pensi possa essere questo il problema?

ora però devo capire come gestire l'event.

Wamba Profilo | Expert

Per la gestione degli eventi ajax.net ti mette a disposizione degli strumenti comodissimi. Qui trovi un esempio su come gestiere il click di un pulsante: http://msdn.microsoft.com/en-us/library/bb311019.aspx. L'esempio mi sembra calzante. Se hai problemi nell'usarlo chiedi pure.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

lukepet Profilo | Junior Member

Ora provo...grazie

Wamba Profilo | Expert

Avevo fatto copia incolla dal browser: http://msdn.microsoft.com/en-us/library/bb311019.aspx
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

lukepet Profilo | Junior Member

Sto facendo delle prove ma ancora niente...

sembra che firefox non riconosca la variabile this.btnVis assegnata in precedenza

infatti sull'istruzione this.btnVis.onclick = function(){.......} firebug mi segnala questo errore: this.btnVis has no properties

nessuna idea?

Wamba Profilo | Expert

Difficile da dire se non mi dai la parte di valorizzazione di this.attributo. Attento soprattuto che 'this' sia quello che ti aspetti.
Tips per referenziare un bottone di id consciuto puoi sempre fare $get('iddelControllo') o il buon vecchio document.getElementById('iddelControllo').
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

lukepet Profilo | Junior Member

prima di tutto ti ringrazio per il supporto...purtroppo ancora non sono riuscito ad identificare il problema.

sto facendo mille prove dalla console di firebug ma ancora niente...la cosa strana è che firefox sembra che non riconosca i bottoni.

Ho tolto tutto il codice javascript ed ho inserito queste semplicissime istruzioni:

<script type="text/javascript">

var button=$get('ctl00$ContentPlaceHolderSx$btnApriCat');

var name = button.value;

alert(name);

</script>

ma firebug mi restituisce: button has no properties - var name = button.value;

bo continuo a provare...la faccenda cmq è proprio strana.

Wamba Profilo | Expert

Aspè: usi c'è il $ nel nome!
Forse ci sono: Non stai usando l'id del controllo, ma il name (infatti il name usa come separatore il $ e l'ID il _).
Funziona con explorer e non con FF: document.getElementById (di cui $get è un semplice alias) ha un comportamento diverso nei due browser. FF se non trova nessun controllo con id indicato restituisce null (o undefined non ricordo). IE se non trova nessun controllo con id indicato cerca per Name e restiuisce il primo elemento trovato.
Se hai bisogno di sapere l'id del controllo renderizzato dato che sei in un controllo iterativo tipo repeater o altri è (lato server Controllo.ClientId).
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

lukepet Profilo | Junior Member

Non ci crederai ma ho notato questa cosa proprio poco fa!

infatti è bastato mettere ctl00_ContentPlaceHolderSx_btnApriCat e tutta sembra funzionare a meraviglia...grazie lo stesso per la risposta, se non ci fossi arrivato da solo avrei risolto il problema grazie a te.

Ciao e grazie.

Wamba Profilo | Expert

>Non ci crederai ma ho notato questa cosa proprio poco fa!
Meglio!
>
>infatti è bastato mettere ctl00_ContentPlaceHolderSx_btnApriCat
>e tutta sembra funzionare a meraviglia...grazie lo stesso per
>la risposta, se non ci fossi arrivato da solo avrei risolto il
>problema grazie a te.

Fesso io, me ne sarei dovuto accorgere già al primo messaggio che quello che usavi non era l'id: solo che essendo a lavoro laggo sempre molto di fretta
Comunque se hai risolto ricordati di chiudere il thread.
>
>Ciao e grazie.
prego, ciao
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

lukepet Profilo | Junior Member

perdona l'ignoranza ma per chiudere il thread basta accettare la risposta?

Wamba Profilo | Expert

Si, serve per chi avrà il tuo stesso problema in futuro. Effettua una ricerca e vede che il thread ha una risposta risparmiando tempo ed evitando di riporre la domanda: in teoria
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5