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
Problema update panel e ajax
venerdì 23 luglio 2010 - 11.59
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 2.0
|
Windows XP
|
Visual Studio 2005
|
SQL Server 2005
|
Office 2007
|
Internet explorer 8.0
|
CSS 3.0
muccio04
Profilo
| Newbie
33
messaggi | Data Invio:
ven 23 lug 2010 - 11:59
ciao a tutti,
quello che mi si prenta probabilmente è un errore di concetto, ma che non riesco a risolvere, per questo vi chiedo aiuto.
il problema è questo:
trattasi della pagina selezione articoli di un e-commerce nella quale ho 4 update panel (come da listato 1) che partendo dal livello di aggregazione
+ alto servono a visualizzare:
famiglie articoli -> gruppi articoli -> categorie articoli -> sotto categorie articoli
al momento del caricamento della pagina genero tanti link button quante sono le famiglie (ovviamente leggendo il tutto da database) e fin qui nessun
problema, il problema insorge quando caricate le famiglie devo caricare i gruppi in quanto le famiglie scompaiono e ciò avviene, suppongo, perchè la pagine viene distrutta (o forse solo l'updatepanel delle famiglie) in toto e ricaricata.
Domanda ma ogni update panel non permette di aggiornare una parte di una pagina web invece dell’intera pagina, perche allora quando clicco sulla famiglia mi scompaiono tutti i link button delle famiglie? oppure visto che trattasi di updatePanel li aggiorna tutti? scusate ma non capisco.
e come mai quando clicco su un link button prsente nell'update panel non viene chiamata la funzione associata al link button ma ricarica il page load?
ovviamente in linea di massima il funzionamento sarebbe: inizialmente carico (da db) tutti i link button delle famiglie, selezionata la famiglia
carico i gruppi, selezionato il gruppo carico le categorie e selezionate la categoria carico la sotto categoria, in fine selezionata la sotto categoria
visualizzo i prodotti.
ovvianemte come da listato 1 famiglie, gruppi, categorie e sotto categorie fanno parte di updatepanel separati.
nel listato 2 inserisco il codice che mi serve per caricare le famiglie ma che è del tutto simile a quello per caricare anche gruppi catgorie e
sottocategorie, sarei infinitamente grato a chi sapesse darmi delle risposte.
Grazie per l'attenzione,
Simone
LISTATO 1
<asp:TableCell CssClass="colonnaTabellaCategorieFamiglieGruppo">
<asp:UpdatePanel ID="updPanelSelezioneFamiglie" runat="server" >
<ContentTemplate>
<asp:Panel ID="titoloPanelFamiglie" runat="server"></asp:Panel>
<asp:Panel ID="panelFamiglie" runat="server"></asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell>
<asp:TableCell CssClass="colonnaTabellaCategorieFamiglieGruppo">
<asp:UpdatePanel ID="updPanelSelezioneGruppo" runat="server" >
<ContentTemplate>
<asp:Panel ID="titoloPanelGruppo" runat="server"></asp:Panel>
<asp:Panel ID="panelGruppo" runat="server"></asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell>
<asp:TableCell CssClass="colonnaTabellaCategorieFamiglieGruppo">
<asp:UpdatePanel ID="updPanelSelezioneCategorie" runat="server" >
<ContentTemplate>
<asp:Panel ID="titoloPanelCategorie" runat="server">Famiglie:</asp:Panel>
<asp:Panel ID="panelCategorie" runat="server"></asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell>
<asp:TableCell CssClass="colonnaTabellaCategorieFamiglieGruppo">
<asp:UpdatePanel ID="updPanelSelezioneSottoCategorie" runat="server" >
<ContentTemplate>
<asp:Panel ID="titoloPanelSottoCategorie" runat="server"></asp:Panel>
<asp:Panel ID="panelSottoCategorie" runat="server"></asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell>
LISTATO 2
/// <summary>
/// carica i primi link button sulla sinistra per le categorie
/// </summary>
protected void caricaRicercaIniziale()
{
//creo un linkbutton per categoria
String query = "SELECT * FROM famiglia";
SqlConnection connection = new SqlConnection(Utility.GetDBConnectionString());
//leggo da databse le varie categorie e le quantità
try
{
connection.Open();
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(query, connection);
adapter.Fill(ds);
//mi prendo tutte le categorie con il numero di articoli che contiene
foreach (DataRow row in ds.Tables[0].Rows)
{
String categoria = row["nome"].ToString();
String numarticoli = row["num_art"].ToString();
//creo il link button, gli associo funzione e commandname e poi lo aggiungo al pannello di selezione degli articoli
LinkButton linkBtnCategoria = new LinkButton();
linkBtnCategoria.Text = categoria + "(" + numarticoli + ")";
linkBtnCategoria.CommandName = categoria;
linkBtnCategoria.Click += new EventHandler(linkBtn_Ricerca_gruppi);
linkBtnCategoria.CssClass = "linkButtonCategorieFamiglieGruppo";
panelGruppo.Controls.Add(linkBtnCategoria);
panelGruppo.Controls.Add(new LiteralControl("<br/>"));
}
}
catch(Exception ex)
{ }
finally
{
connection.Close();
}
}
mrub
Profilo
| Junior Member
51
messaggi | Data Invio:
ven 23 lug 2010 - 16:26
Ad occhio dovresti:
- impostare, aseconda delle esigenze, UpdateMode su Conditional (e non Always come predefinito) negli updatepanel
- impostare i triggers per specificare quando aggiornare l'updatecontrol. Es.
<Triggers>
<asp:AsyncPostBackTrigger ControlID="CercaLinkButton" />
</Triggers>
assieme a UpdateMode = 'conditional'
assicura che l'updatePanel verrà aggiornato solo quando clicchi su CercaLinkButton
- assicurati infine che l'aggiornamento di ciascun updatepanel non agisca su elementi della pagina all'esterno dell'update panel. Per capirci, se una rutine chiamata da un updatepanel comporta ad es. me.Label1.Text="miotesto" e label1 è contenuta nella pagina al di fuori degli updatePanel, ciò comporterà l'aggiornamento dell'intera pagina e a cascata di tutti gli updatepanel
Spero di esserti stato utile,
mirko.
mrub
Profilo
| Junior Member
51
messaggi | Data Invio:
ven 23 lug 2010 - 16:35
Guardando meglio il codice un'altra cosa che modificherei ...
piuttosto che generare da codice il linkbutton utilizzerei un repeater (o un datalist se ti viene più semplice) bindato ad un sqldatsource nel cui itemtemplate sia contenuto
<asp:linkbutton ... Text='<%# Eval("categoria") %>' onclick='...
muccio04
Profilo
| Newbie
33
messaggi | Data Invio:
lun 26 lug 2010 - 11:44
il problema è che da ogni update panel deve aggiornare il contenuto del update panel successivo, ad esempio l'update panel delle "famiglie (articoli)" deve aggiornare l'update panel dei "gruppi (articoli)" , quindi come posso fare?
mrub
Profilo
| Junior Member
51
messaggi | Data Invio:
lun 26 lug 2010 - 11:55
Ad es. nell' UpdatePanel2 metti
<Triggers>
<asp:AsyncPostBackTrigger ControlID="pulsante/i o controllo/i contenuto nell'Updatepanel1" />
</Triggers>
e così via
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 !