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

Forzare l'Update() di un UpdatePanel tramite un evento Javascript... una scelta corretta?

Oggi mi è stato chiesto a bruciapelo (cito testualmente) "...un modo per eseguire il refresh di un UpdatePanel tramite un evento javascript (ad esempio onblur di un input text)...".
Se ci pensiamo bene, questo tipo di scelta implementativa va "filosoficamente" contro i principi di AJAX. Infatti (assumendo che il browser supporti Javascript :)), è maggiormente corretto utilizzare il più possibile le API AJAX del framework client-side per gestire il comportamento dei controlli client-side, al fine di evitare round-trip dispendiosi e spesso inutili verso il server (uno degli obiettivi primari di AJAX, d'altronde, è proprio questo :)).
Si pensi al caso di un' invocazione di un Web Service: gestirla direttamente tramite il framework lato client permette di risparmiare un round-trip!
Potremmo discutere sulla questione all'infinito...;)
Ad ogni modo, una soluzione veloce al problema potrebbe consistere nel forzare da Javascript il PostBack della pagina nei confronti di un controllo impostato come Trigger del nostro UpdatePanel. Come controllo potremmo usare ad esempio un HiddenField:

<!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>Test UpdatePanel 'OnBlur' su Input Text</title>        
    <
script type="text/javascript">
         
function postBackHF(hiddenFieldID) 
         {
            var hiddenField = $get(hiddenFieldID);
            if (hiddenField) 
            { 
              hiddenField.value = (new Date()).getTime();
              __doPostBack(hiddenFieldID,'');
            }
         }
    
</script>
<
/head>
<
body>
    <
form id="form1" runat="server">
    <
div>
        <
h1>Test UpdatePanel 'OnBlur' su Input Text</h1>
                
        <asp:ScriptManager 
ID="TestScriptManager" runat="server" />        
        <asp:UpdatePanel 
ID="UpdatePanelTest" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
            <ContentTemplate>
                <
div style="background-color: #FFFF00; padding: 10px;">                    
                  <
h2>UpdatePanel</h2>
                 <
input type="text" id="testTB" value="Scatena l'OnBlur..." 
                       
onblur="postBackHF('<%=HiddenFieldTest.ClientID %>')" />                    
                    <
br />
                    <asp:HiddenField 
ID="HiddenFieldTest" runat="server" />
                    <asp:Label 
ID="Outputlbl" runat="server" Text="Label"></asp:Label>                    
                <
/div>
            <
/ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger 
ControlID="HiddenFieldTest" EventName="ValueChanged" />                
            <
/Triggers>
        <
/asp:UpdatePanel>    
    <
/div>
    <
/form>
<
/body>
<
/html>

E nel CodeFile...

...
protected void Page_Load(object sender, EventArgs e)
 {
   if(IsPostBack)
   {
     Outputlbl.Text = "UpdatePanel Refreshed: " + DateTime.Now.ToString();
   }
 }
...


Come si può osservare, all'occorrenza dell' evento "onblur" della nostra textbox, andiamo a cambiare il valore lato client del nostro HiddenField di appoggio. Quindi, forziamo il __doPostBack() in modo da scatenarne, lato server, l'evento ValueChanged, ovvero il Trigger che invocherà automaticamente il metodo Update() del nostro UpdatePanel.
In questo caso si è scelto di impostare l'evento ValueChanged dell' HiddenField come AsyncPostBackTrigger in quanto la proprietà ChildrenAsTriggers dell'UpdatePanel è impostata su "False". E' chiaro che si può pensare di implementare questo scenario in tanti altri modi diversi :)...

Print | posted on venerdì 4 maggio 2007 02:54 | Filed Under [ ASP.NET AJAX ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET