Cambiare valore di una label dentro ad un controllo utente da codice: ...

sabato 21 febbraio 2009 - 18.19

ravalon Profilo | Expert

Salve a tutti...

ho un controllo utente che sta nella mia masterpage...

dentro al controllo c'è una label, della quale vorrei, in seguito a delle modifiche, cambiare il valore del testo ...

Lanciando una procedura che opera le modifiche, quando poi vado a modificare la proprietà .text della label non ho alcun errore ma la label non si aggiorna...da cosa dipende ?

ricibald Profilo | Newbie

Il problema è piuttosto generico. Ti posso dare una lista di possibili cause:
- hai abilitato AJAX tramite UpdatePanel? Se è così, verifica che l'UpdatePanel che avvolge il tuo controllo che causa la Postback avvolga anche il tuo controllo Label
- in che punto del codice aggiorni la Text? Attenzione alla successione degli eventi, potrebbe accadere che il tuo set della proprietà venga sovrascritto da un altro set che tu stessa hai scritto

Se riesci a dare maggiori dettagli forse possiamo indagare sul problema
Ricibald - http://programminghacks.net

ravalon Profilo | Expert

Questo è il codice aspx

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ricordo che questo box è un controllo utente ASCX inserito nella masterpage

Da una pagina del sito richiamo poi questa procedura

**************
LoginControl1.AggiornaQtBoxLogin(CInt(QtCarrello))
**************

La quale si trova proprio dentro il controllo e fa questo

**************
public sub AggiornaQtBoxLogin(byval intQt as Integer)

dim lblQt as Label=ctype(PanelWelcome.FindControl("lblNprodottiCarrello"),Label)
lblQt.Text =intQt

end sub
**************

ma non funziona...

ravalon Profilo | Expert

Nessun suggerimento ?

ravalon Profilo | Expert

Per favore datemi un aiuto...

il sito usa AJAX, ma il controllo ASCX in se no....

ditemi se c'è un errore nel codice scritto o nella sua logica per cambiare la TEXT della label....cosi posso escludere qualcosa, per ora non sono riuscito a trovare il problema

ricibald Profilo | Newbie

Secondo me devi prestare molto attenzione all'updatePanel. Ti do un consiglio: prova a modificare lo ScriptManager impostando EnablePartialRendering="false" e vedi se va. Nel caso in cui va tutto bene, allora è un problema di rendering parziale: verifica l'UpdatePanel e le sue dipendenze. Fammi sapere
Ricibald - http://programminghacks.net

ravalon Profilo | Expert

Lo scriptmanager non è direttamente sul controllo dove sta la label che mi interessa, comunque ho impostato la proprietà EnablePartialRendering su FALSE e funziona perfettamente per quanto riguarda l'aggiornamento della label...

il problema è che l'azione di AJAX non ha effetto e la pagina viene completamente ricaricata....

dovresti gentilmente spiegarmi cosa è cambiato tecnicamente...e dirmi, se puoi, come far funzionare anche AJAX in modo che l'aggiornamento sia immediato senza bisogno di ricaricare la pagina.

ricibald Profilo | Newbie

Almeno abbiamo circoscritto il problema .

Il concetto è questo: un controllo esegue una postback. Se questo controllo è avvolto da un UpdatePanel allora esegue un aggiornamento parziale della pagina. In altre parole, va ad aggiornare solo i controlli che sono avvolti dall'UpdatePanel che contiene il controllo che ha scatenato la postback.

Nel tuo caso quindi dovresti inserire la label all'interno dell'updatePanel che contiene il pulsante che scatena la postback. Se non puoi perché non li puoi raggruppare vicino, puoi fare in 2 modi:
- creare un UpdatePanel che avvolge solo la label e impostarlo ad UpdateMode=Always (+ semplice ma aggiornerà sempre la label a seguito di chiamate ajax e non è ottimale)
- creare un UpdatePanel che avvolge solo la label e impostare i trigger (+ complesso ma consente di aggiornare la label solo quando serve)

Per maggiori info sull'ultimo punto vedi: http://www.asp.net/AJAX/documentation/live/Tutorials/UpdatePanelTutorials.aspx
Ricibald - http://programminghacks.net

ravalon Profilo | Expert

Capito...

ora c'è un problema....al di là di quale delle 2 soluzioni sceglierò, mi dice che non posso usare un UpdatePanel senza uno scriptmanager....

Se metto lo scriptmanager, dice che ne posso usare solo uno .... in effetti essendo il controllo incastrato nella masterpage, forse vede quello che già è presente nella pagina specifica che usa anch'essa AJAX.

ricibald Profilo | Newbie

Lo scriptmanager lo devi dichiarare una sola volta da qualche parte (di solito nella master page). Puoi aggiungere tutti gli updatePanel che vuoi, basta che esiste uno (al max) scriptmanager
Ricibald - http://programminghacks.net

ravalon Profilo | Expert

ero partito con un approccio di codesto tipo, poi non so perchè ho cambiato (ma devo avere incontrato dei problemi) e l'ho inserito nelle pagine che lo richiedevano....

dici che mi conviene fare nuovamente marcia indietro o c'è un'altra scappatoia ?

ricibald Profilo | Newbie

Secondo me ti conviene inserirlo nella master page. Se poi trovi problemi puoi sempre disabilitare lo script manager da codice mettendo la proprietà EnablePartialRendering a "false"
Ricibald - http://programminghacks.net

ravalon Profilo | Expert

Ok l'ho messo nella Masterpage, funziona tutto...

a questo punto proverò col suggerimento che mi hai dato per far funzionare la label...ti faccio sapere e grazie per ora

ricibald Profilo | Newbie

Di niente
Ricibald - http://programminghacks.net

ravalon Profilo | Expert

Ok, ho incluso la label dentro un UpdatePanel AJAX con l'UpdateMode settato a ALWAYS e funziona tutto...

Ti ringrazio moltissimo !!!
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5