Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Ajax: Imagebutton esegue evento solo dopo il primo click. AIUTOOOOOO...
mercoledì 11 febbraio 2009 - 10.27
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
edoardo.tondo
Profilo
| Newbie
18
messaggi | Data Invio:
mer 11 feb 2009 - 10:27
Buongiorno a tutti.
Ho un problema che mi sta facendo impazzire da un giorno e mezzo.
Il problema è il seguente:
Ho creato una pagina di default contenente un updatepanel con all'interno un PlaceHolder, nel quale carico dinamicamente i vari web usercontrol a seconda dell' item del menu selezionato. E fin qui tutto ok.
Ho creato in seguito uno usercontrol che genera un calendario in html in modo dinamico all'interno di una label. La label è a sua volta inserita all'interno di un updatepanel. Lo usercontrol contiene due imagebutton, uno btnIndietro e l'altro btnAvanti, i quali sono stati inseriti all'esterno del UpdatePanel. Spiegato ciò il problema è che l'evendo dei rispettivi imagebutton viene eseguito dopo il primo click.
Mi spiego meglio:
-1° Click ---> l'evento non viene eseguito
-2° Click ---> l'evento viene eseguito
-3° Click ---> l'evento viene eseguito
-4° Click ---> l'evento viene eseguito
-5° Click ---> l'evento viene eseguito
-6° Click ---> l'evento viene eseguito
-7° Click ---> l'evento viene eseguito
- ecc...
Come posso risolvere questo problema? Vi prego aiutatemi fine settimana prossima devo consegnare il progetto
Saluto e vi ringrazio tutti anticipatamente
balfaz
Profilo
| Expert
726
messaggi | Data Invio:
mer 11 feb 2009 - 10:30
puoi farci vedere un po di codice, primo del markup e poi un po di behind
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."
edoardo.tondo
Profilo
| Newbie
18
messaggi | Data Invio:
mer 11 feb 2009 - 10:34
Codice HTML:
<table width="100%" height="100%" border="1" cellpadding="0" cellspacing="1" bordercolor="#CCCCCC" class="MenuSxTxt">
<tr bgcolor="#E6E6E6">
<td width="10%" height="3px">VISTA APPUNTAMENTI</td>
</tr>
<tr bordercolor="#FFFFFF">
<td valign="top" align="center">
<table border="0" bordercolor="#CCCCCC" cellspacing='0' collspacing='0' width="100%">
<tr style="text-align: center;">
<td width="5%" align="left" valign="top">
<asp:ImageButton ID="btnIndietro" runat="server" CausesValidation="false" OnClick="btnIndietro_Click"
ImageUrl="~/img/indietro.gif" />
</td>
<td width="90%" colspan="5" align="center">
<asp:Label ID="lblMeseAnno" runat="server"></asp:Label>
</td>
<td width="5%" align="right" valign="top">
<asp:ImageButton ID="btnAvanti" runat="server" onclick="btnAvanti_Click"
ImageUrl="~/img/next.gif" />
</td>
</tr>
</table>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" RenderMode="Inline" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="lblCalendario" runat="server"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnIndietro" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btnAvanti" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</td>
</tr>
</table>
Codice C#:
protected void Page_Load(object sender, EventArgs e)
{
//if (!Page.IsPostBack)
//{
UtilityDataTempo utilCal = new UtilityDataTempo();
mese.Value = DateTime.Now.Month.ToString();
anno.Value = DateTime.Now.Year.ToString();
lblCalendario.Text = utilCal.GeneraCalendario(Convert.ToInt32(mese.Value), Convert.ToInt32(anno.Value));
lblMeseAnno.Text = utilCal.getMonthName(Convert.ToInt32(mese.Value)).ToUpper() + " " + anno.Value.ToString();
//}
}
protected void btnIndietro_Click(object sender, EventArgs e)
{
UtilityDataTempo utilCal = new UtilityDataTempo();
if (mese.Value.ToString() == "1")
{
mese.Value = "12";
anno.Value = Convert.ToString(Convert.ToInt32(anno.Value) - 1);
}
else
{
mese.Value = Convert.ToString(Convert.ToInt32(mese.Value) - 1);
}
lblCalendario.Text = "";
lblCalendario.Text = utilCal.GeneraCalendario(Convert.ToInt32(mese.Value), Convert.ToInt32(anno.Value));
lblMeseAnno.Text = utilCal.getMonthName(Convert.ToInt32(mese.Value)).ToUpper() + " " + anno.Value.ToString();
}
protected void btnAvanti_Click(object sender, EventArgs e)
{
UtilityDataTempo utilCal = new UtilityDataTempo();
if (mese.Value.ToString() == "12")
{
mese.Value = "1";
anno.Value = Convert.ToString(Convert.ToInt32(anno.Value) + 1);
}
else
{
mese.Value = Convert.ToString(Convert.ToInt32(mese.Value) + 1);
}
lblCalendario.Text = "";
lblCalendario.Text = utilCal.GeneraCalendario(Convert.ToInt32(mese.Value), Convert.ToInt32(anno.Value));
lblMeseAnno.Text = utilCal.getMonthName(Convert.ToInt32(mese.Value)).ToUpper() + " " + anno.Value.ToString();
}
balfaz
Profilo
| Expert
726
messaggi | Data Invio:
mer 11 feb 2009 - 10:50
prova per adesso a sostituire la tua tag updatepanel cosi
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
vediamo un po
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."
edoardo.tondo
Profilo
| Newbie
18
messaggi | Data Invio:
mer 11 feb 2009 - 11:01
Non è cambiato assolutamente nulla è come se al primo click rigenera la pagina
balfaz
Profilo
| Expert
726
messaggi | Data Invio:
mer 11 feb 2009 - 11:25
togli i trigger della'updatepanel
e nel tuo codice fai questo
protected void btnIndietro_Click(object sender, EventArgs e)
{
UtilityDataTempo utilCal = new UtilityDataTempo();
if (mese.Value.ToString() == "1")
{
mese.Value = "12";
anno.Value = Convert.ToString(Convert.ToInt32(anno.Value) - 1);
}
else
{
mese.Value = Convert.ToString(Convert.ToInt32(mese.Value) - 1);
}
lblCalendario.Text = "";
lblCalendario.Text = utilCal.GeneraCalendario(Convert.ToInt32(mese.Value), Convert.ToInt32(anno.Value));
lblMeseAnno.Text = utilCal.getMonthName(Convert.ToInt32(mese.Value)).ToUpper() + " " + anno.Value.ToString();
updatepanel1.update() <---aggiunge questa riga
}
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."
edoardo.tondo
Profilo
| Newbie
18
messaggi | Data Invio:
mer 11 feb 2009 - 11:47
Forse non hai capito bene il problema. Al primo click non entra proprio nell'evento è dal secondo click in poi che esegue le istruzioni dell'evento
balfaz
Profilo
| Expert
726
messaggi | Data Invio:
mer 11 feb 2009 - 12:28
aahhh, ho capito
allora ho visto che hai tolto l'if (!Page.IsPostBack), come mai??
Hai fatto il debug del codice è vedere cos'è che fa lui prima d'arrivare al click de bottone
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."
edoardo.tondo
Profilo
| Newbie
18
messaggi | Data Invio:
mer 11 feb 2009 - 12:37
Se decommento l' if del Page_Load non esegue le istruzioni all'interno dell'if.
Con il primo click mi esegue solo il Page_Load mentre dal secondo in poi mi esegue sia il Page_Load che l'evento
balfaz
Profilo
| Expert
726
messaggi | Data Invio:
mer 11 feb 2009 - 12:46
vuoi dire che ci conti con l'evento pageload per fare un postback asincrono???
se fosse si allora è sbagliato
ti consiglio di far diventare la procedura del load una procedura recursiva (che puoi richiamare ogni volta che sia necessaria), cosi la richiami al load della pagina con il if !page.ispostback e poi la richiami dall'evento click. Solo per cominciare
Poi se questo non sistemasse il problema dobbiamo continuare a cercare cos'è che da fastidio, perché la struttura della pagina e dell'updatepanel è corretta
Ooooppsss!!!, quasi mi dimenticavo mette la proprietà dell'updatepanel UpdateMode = "Always"
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."
edoardo.tondo
Profilo
| Newbie
18
messaggi | Data Invio:
mer 11 feb 2009 - 17:45
Risolto!!!
La soluzione è in fondo a questa pagina:
http://www.omgili.com/newsgroups/microsoft/public/it/dotnet/asp/1194424513004788225790y42g2000hsygooglegroupscom.html&q=dinamicamente
balfaz
Profilo
| Expert
726
messaggi | Data Invio:
mer 11 feb 2009 - 18:23
ok, ben per te.
Ho capito bene, che alla fine erano i usercontrol la base del problema??
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."
balfaz
Profilo
| Expert
726
messaggi | Data Invio:
ven 13 feb 2009 - 18:42
alla fine cosa ci racconti sei riuscito a fare qualcosa???
"Che in questo 2009 i nostri codici possano sconvolgere il mondo."
Torna su
Stanze Forum
Elenco Threads
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 !