104 messaggi dal 19 maggio 2001
Ciao a tutti, seguendo un corso video di asp.net 2.0, è illustrato il seguente esempio che non vuole proprio funzionare :
ho un database con dei titoli azionari, la pagina viene caricata con i dati la prima volta ed ogni 5 secondi dovrebbe richiamare una funzione che aggiorna i dati senza eseguire il postback della pagina...tutto questo facendo una callback :

public partial class _Default : System.Web.UI.Page, ICallbackEventHandler
{
private string r;

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Invoco il giusto adapter...
TitoliTableAdapter tta = new TitoliTableAdapter();
BorsaDataManager.TitoliDataTable dt = tta.GetValoriTitoli();

gvTitoli.DataSource = dt;
gvTitoli.DataBind();
}


string cbScript = "window.setInterval(" + MyCallbackReference + ",5000)";
//Registrazione script di callback
ClientScript.RegisterStartupScript(this.GetType(),"startupscript" ,string.Format("<script>window.setInterval(\"{0}\",5000)</scrip>", MyCallbackReference));
//ClientScript.RegisterStartupScript(this.GetType(),"startupscript",cbScript,true);
}

protected string MyCallbackReference
{
get
{
return ClientScript.GetCallbackEventReference(this, null, "aggiornaDati", null, true);
}
}

#region ICallbackEventHandler Members

public string GetCallbackResult()
{
return r;
}

public void RaiseCallbackEvent(string eventArgument)
{
r = "Chiamata callback..";
}

#endregion
}

Ed una parte della pagina è la seguente :

<script type="text/javascript">
function aggiornaDati(risultato,contesto)
{
alert(risultato);
alert(contesto);
}
</script>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvTitoli" runat="server" BackColor="White" BorderColor="#999999"
BorderStyle="None" BorderWidth="1px" CellPadding="3" Font-Names="Verdana" Font-Size="8pt"
GridLines="Vertical">
<FooterStyle BackColor="#CCCCCC" ForeColor="Black" />
<RowStyle BackColor="#EEEEEE" ForeColor="Black" />
<SelectedRowStyle BackColor="#008A8C" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
<HeaderStyle BackColor="#000084" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="#DCDCDC" />
</asp:GridView>

</div>
</form>

Non fate caso alla variabile "r" mi è servita fino ad oggi per capire se almeno entrasse nel RaiseCallbackEvent facendo il debug..ma niente...C'è un errore al caricamento della pagina...dovuto a qualcosa nel javascript...però nel corso video funziona correttamente!! Come mai ?

PS : la funzione aggiornaDati dovrebbe aggiornare i dati della pagina, però ora ci sono solo due alert, per provare che venga eseguita ogni 5 secondi ma non c'è niente da fare.
426 messaggi dal 17 aprile 2006
ciao paolopat.

il tuo problema è semplicemente risolvibile sostituendo la registrazione dello script da te usata:

ClientScript.RegisterStartupScript(this.GetType(),"startupscript" ,string.Format("<script>window.setInterval(\"{0}\",5000)</scrip>", MyCallbackReference));

con :

RegisterStartupScript("startupscript", string.Format("<script>window.setInterval(\"{0}\",5000)</script>",
MyCallbackReference));

a dire il vero questo sistema è retaggio del vs2003 ed oltre tutto è pure deprecato... ma non ho ancora studiato il nuovo metodo per pigrizia, per cui non so dove sia errato.
se sostituisci la stringa vedrai che funziona..

ps forti i video della innovactive vero?
ciao

Ciao Alessandro
426 messaggi dal 17 aprile 2006
caspiterina la soluzione era ancora più semplice...
ti sei semplicemente dimenticato la t finale di </scripT> nella chiusura del tag.

dunque ripropongo la soluzione... modifica la tua:
ClientScript.RegisterStartupScript(this.GetType(),"startupscript" ,string.Format("<script>window.setInterval(\"{0}\",5000)</scrip>", MyCallbackReference));
con :

ClientScript.RegisterStartupScript(this.GetType(),"startupscript" ,string.Format("<script>window.setInterval(\"{0}\",5000)</script>", MyCallbackReference));


non oso pensare a quanto tempo hai perso per questo scherzetto...
ps. dopo averti scritto la soluzione ho deciso di vedere le differenze del nuovo metodo (formalmente simile a quello precedentemente implementato in vs2003) ed ho individuato il tuo errore semplicemente osservando il source HTML della pagina generata.
Dunque se mi permetti un consiglio, non dimenticarti di controllare cosa combina vs2005 in runtime.
in più potresti evitare questi typos (errori di battitura) usando quest'altro sistemino:

ClientScript.RegisterStartupScript(this.GetType(), "startupscript", string.Format("window.setInterval(\"{0}\",5000)", MyCallbackReference), true);
dove in pratica chiedi a c# di aggiungere per conto tuo i tag <script> di apertura e chiusura mediante la valorizzazione a true del parametro boolean addSciptTags evitando dunque di scriverli a mano

ciao
Alessandro Di Cicco

Ciao Alessandro
104 messaggi dal 19 maggio 2001
grazie ragazzi dopo ore me ne sono accorto da solo....quante volte a causa di una stupidaggine, uno sviluppatore perde ore ed ore prezione...grazie ancora.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.