mercoledì 6 febbraio 2013

UpdatePanel never Update.

Questo problema ammetto che mi ha causato davvero un tremendo malessere.

<asp:Timer ID="tmrSplineChart" runat="server" 
        ontick="tmrSplineChart_Tick" 
        Interval="25000">
</asp:Timer>                                
<asp:UpdatePanel ID="updChart" 
            runat="server" 
            UpdateMode="Conditional" 
            ChildrenAsTriggers="false">
    <Triggers>
        <asp:AsyncPostBackTrigger 
                ControlID="tmrSplineChart" 
                EventName="Tick" />
    </Triggers>                    
    <ContentTemplate>                       
       <%Response.Write (DateTime.Now.ToLongTimestring());%>
    </ContentTemplate>
 </asp:UpdatePanel>

Risultato: Non aggiorna .. PERCHE'?

Se provate a vedere la pagina con firebug (per esempio) attivando la console scoprirete che il comando Response.Write ( ... ) è causa di un errore.

E non solo blocca completamente tutto quello che avviene nell'update panel ( prima o dopo ), in breve ( dopo aver generato un errore )  inibisce il rendering del content template.

Come lo si risolve?

Ci sono vari metodi, il primo è di utilizzare controlli specifci come label textbox e simili.

E se ci fosse un qualcosa di più complesso ? Come ad esempio registrare un script da eseguire in client side ?


public void UpdateData()
{
    lblDate.Text = "Last Update: " + DateTime.Now.ToLongTimeString();

    string s = @"
                $(document).ready(function() {
                    
                    alert (" Eccomi !");

                    });   
                 ";



    ScriptManager.RegisterClientScriptBlock(
        this.Page, 
        this.Page.GetType(), 
        "Alert_Eccomi", s, true);
}

Il mio consiglio e di utilizzare lo ScritpManager  ( classe statica presente nell'oggetto Page ), che è ne più ne meno lo ScriptManager Ajax.

In questo modo lo script sarà "implementato nella pagina e gestito" senza troppe complicazioni.

Jquery ( come da esempio ) funziona !

Nessun commento: