95 messaggi dal 04 luglio 2008
Ciao a tutti,
ho un problema simile a quello di francescogt.
Vi spiego:
All'interno della master page è presente un placeholder che utilizzo per la ricerca avanzata. Questo viene popolato solo quando si entra all'interno della consultazione per categoria.
Riesco a creare da codice tutti i controlli che mi servono in base alla categoria in cui ci si trova ed ad ogni controllo assegno tramite la sua proprietà oggetto.ID un valore univoco.
Avviando la pagina e controllando il sorgente, posso notare tranquillamente che i controlli vengono creati in maniera corretta e l'id viene impostato.
Il problema si crea nel momento della ricerca...come ripeto, i controlli vengono creati in base alla categoira in cui ci si trova, perciò avevo pensato di
1. controllare la categoria
2. ciclare sulla proprietà del placeholder "Controls" per recuperarmi di ognuno il tipo, l'id e il valore.

Ma non riesco
Se faccio una cosa del genere
foreach (Control c in cphRicerca.Controls) mi dice che all'interno c'è un solo controllo literal che ha la proprietà Controls impostata come Controls.EmptyCollection

la pagina è così formata:

<divRicerca>
<Panel id="header" />
<Panel id="content" >
<Table>
//in ogni riga ci sono i controlli.
</Table>
</Panel>
</divRicerca>

Ho provato anche ad usare il FindControl per vedere se me li trovava ma niente con degli oggetti che sono sempre presenti, ma ritorna null...
Dove sbaglio?

Grazie a tutti
devi necessariamente ricreare i controlli ad ogni PostBack

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
95 messaggi dal 04 luglio 2008
nostromo ha scritto:
devi necessariamente ricreare i controlli ad ogni PostBack


Perdonami ma temo di non aver capito bene. Io non ho bisogno di ricreare gli oggetti ma estrarre il valore dell'id e del valore nel momento in cui si clicca sul bottone cerca, infatti vorrei recuperarli nel metodo di click con il mouse presente nella master page.
se aggiungi i controlli runtime, visto la natura stateless del web, devi ricrearli anche alle successive richieste.

i valori li puoi recuperare dopo averli ricreati, infatti grazie al ViewState questo sono persistiti in un campo nascosto all'interno della pagina

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
95 messaggi dal 04 luglio 2008
nostromo ha scritto:
se aggiungi i controlli runtime, visto la natura stateless del web, devi ricrearli anche alle successive richieste.

i valori li puoi recuperare dopo averli ricreati, infatti grazie al ViewState questo sono persistiti in un campo nascosto all'interno della pagina


Grazie ancora della risposta, ma non riesco a capire come fare...Ho capito il concetto ma non saprei come fare...

Come faccio a sapere quanti controlli ci sono all'interno, visto che i controlli vengono caricati via codice in base alla pagina in cui mi trovo?
Quale proprietà del ViewState devo invocare per recuperare il valore di tutti i controlli?
Quindi devo nuovamente invocare il popolamento del placeholder nell'evento click?

Perdonami, ma non mi è mai capitata una situazione simile finora.

Grazie
il ViewState viene ripristinato automaticamente, l'unica cosa che devi fare e ricreare i controlli.

ora visto che li crei da codice, sai quanto ne crei, o perlomeno è prevedibile, e se non è prevedibile è quanto meno verificabile.

quindi ti crei un algoritmo che ti salvi il numero de controlli che hai creato ed il tipo, fatto questo non devi riprodurre essattamente quello che fai al click, perche non devi rivalorizzare i controlli

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
23 messaggi dal 23 novembre 2006
Ciao,
"ricreare i controlli al postback" significa che ad ogni postback della pagina devi ricreare tali controlli. Per esempiio se hai una funzione generacontrolli() che ti crea tutti i controlli a runtime la devi richiamare ad ogni postback. Puoi fare in questo modo:

nel page_Load

//se si verifica un postback della pagina
if (IsPostBack)
{
//rigenera i controlli a runtime
GeneraControlli();
}

ricreandoli tutti, i valori precedentemente assegnati verrano mantenuti e riassegnati ai relativi controlli. Quindi puoi accedere al controllo tramite l'id assegnata a runtime e prendere tutto quello che ti serve.

Saluti.

Un sistema deve essere sempre concepito in modo da resistere alla peggiore combinazione possibile di circostanze.
95 messaggi dal 04 luglio 2008
Arieccomi :).
Grazie ai vostri preziosi consigli sono riuscito a vedere i controlli, tramite debug, nel momento in cui si clicca sul bottone cerca, in quanto tutto il discorso mi serve per la ricerca avanzata.

Ho controllato tramite debug che l'ID che gli assegno ad ogni controllo è valorizzato correttamente ed è così, ma se provo a fare cphRicerca.FindControl("nomeControllo") mi torna sempre null.
Vi prego non ditemi che devo partire ogni volta dal contenitore principale e mano mano scendere fino al controllo(tra cui passa p.e. nelle celle della tabella a cui vengono assegnati id al volo), in quanto mi trovo in un placeholder->div->contentPanel->Table e in ogni row ci sono i controlli.

Però questo lo faccio nella masterPage. Mi consigliate di passare la palla alla pagina che crea i controlli, prendere i valori e poi invocare la relativa ricerca?
E' più semplice ?

Grazie
Modificato da stuzzo il 23 luglio 2009 18.44 -

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.