DarioSantarelli.Blog("UgiDotNet");

<sharing mode=”On” users=”*” />
posts - 176, comments - 105, trackbacks - 3

My Links

News


This is my personal blog. These postings are provided "AS IS" with no warranties, and confer no rights.




Tag Cloud

Archives

Post Categories

My English Blog

jQuery e ASP.NET Ajax: $(document).ready() VS asynchronous postback

Molto spesso capita di dover integrare, anche solo per semplici miglioramenti grafici, dei plugin jQuery all’interno delle nostre pagine ASP.NET. Gran parte delle volte l’impatto è indolore mentre in alcuni casi specifici occorre far riferimento ad accorgimenti non banali, soprattutto quando c’è di mezzo ASP.NET Ajax.
Il classico esempio si verifica quando ci si aspetta che la funzione $(document).ready() venga chiamata correttamente anche dopo un asynchronous postback tramite UpdatePanel. Infatti, la funzione $(document).ready() permette di determinare il momento in cui il DOM della pagina è caricato dal browser. Tuttavia, in caso di asynchronous postback il DOM può essere eventualmente modificato e non ricaricato nuovamente. Quindi il nostro codice javascript nella forma:

$(document).ready(function()
{
 
// codice...
});


... non verrà eseguito!
Un workaround molto semplice per questo tipo di situazione è quello di sfruttare l’evento client-side endRequest generato dopo un postback asincrono, quando il controllo viene  restituito al browser. Agganciando il nostro codice jQuery che usa $(document).ready() all’interno di un opportuno event Handler per tale evento possiamo risolvere il problema. Ecco un semplice esempio:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 
<title>jQuery .ready() function and asynchronous postback</title>       
</head>
<body>
 
<form id="mainForm" runat="server">
 
<div>
   
<asp:ScriptManager ID="scriptManager" runat="server">
     
<Scripts>
      
<asp:ScriptReference Path="http://code.jquery.com/jquery-latest.js" />
     
</Scripts>
   
</asp:ScriptManager>
   
<asp:UpdatePanel ID="updatePanel" runat="server">
     
<ContentTemplate>                
        
<asp:Button ID="btnTest" runat="server" Text="Do Async PostBack" />
     
</ContentTemplate>
   
</asp:UpdatePanel>
  
</div>
 
</form>

   
 
<script type="text/javascript">
   
   
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
   
   
function EndRequestHandler(sender, args)
   
{
     
if (args.get_error() == undefined) Test();           
   
}

   
function Test()
   
{
     
$(document).ready(function()
     
{
       
alert('$(document).ready() called!!!');
     
});
   
}

   
Test();                    
           
 
</script>
 
</body>
</html>


Technorati Tag: ,,,

Print | posted on lunedì 9 marzo 2009 23:58 | Filed Under [ ASP.NET AJAX ]

Feedback

Gravatar

# re: jQuery e ASP.NET Ajax: $(document).ready() VS asynchronous postback

Grazie mi hai salvato la viota :), funziona che è na bellezza
27/03/2009 21:43 | Davide
Gravatar

# re: jQuery e ASP.NET Ajax: $(document).ready() VS asynchronous postback

Dipende... Le ASP.NET AJAX Extensions forniscono funzionalità e controlli server-side, ma anche un framework client-side. JQuery invece fornisce funzionalità esclusivamente client-side che si accavallano a quelle esposte dalle ASP.NET AJAX Extensions. Spesso però accade che un progetto parta con le ASP.NET AJAX Extensions e finisca per includere anche JQuery.
A mio modo di vedere il discorso dell'ottimizzazione va studiato relativamente alle performance e non tanto al framework usato. In questa ottica può aver senso far coesistere il framework "ASP.NET AJAX Extensions" con JQuery.
02/02/2010 20:46 | dario.santarelli
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET