Recuperare una textbox in un placeholder con il previouspage

martedì 16 marzo 2010 - 15.49

zseven Profilo | Senior Member

Ciao ragazzi,
scusatemi ma sto impazzendo!!!

Ho un placeholder che mi carica un file .ascx.
All'interno di questo file c'è un form di ricerca con un pulsante che ha attivato il postbackurl su di un'altra pagina.
In quest'altra pagina al load ho impostato:

[CODE] Dim MioPLC As Control MioPLC = PreviousPage.Controls(0).FindControl("PlcRicerca") Dim TestoAutore As TextBox TestoAutore = CType(MioPLC.FindControl("TxtAutore"), TextBox) [B] TxtAutoreHidden.Text = TestoAutore.Text [/B] [/CODE]

Mi restituisce errore sulla riga che ho messo ingrassetto.
Il placeholder lo recupera correttamente, in quanto ho provato a mostrare l'id del placeholder recuperato e va tutto ok, quindi mi sa che sbaglio a recuperare il campo di testo presente nel placeholder... ma davvero non so dove sbaglio.

Sapete aiutarmi?
Grazie mille

Gho5t Profilo | Junior Member

in effetti è come dici tu... sembra che non ti recupera la TextBox "TestoAutore" quando esegui:
Dim TestoAutore As TextBox TestoAutore = CType(MioPLC.FindControl("TxtAutore"), TextBox)
sicuro che TxtAutore sia effettivamente il nome e che sia effettivamente all'interno del PlaceHolder "PlcRicerca"?
prova anche a stampare a video il valore di TestoAutore.Text per capire se effettivamente il problema è che non trova TxtAutore...

zseven Profilo | Senior Member

ciao gho5t e grazie per la risposta.
Però non posso stamparmi il valore di TxtAutore.text perchè mi dà errore proprio perchè non lo trova il controllo....

Gho5t Profilo | Junior Member

ora che sappiamo che l'errore è che non ti trova il controllo "TxtAutore" ti conviene andare a vedere il perché non te lo trova...
sicuro che si chiami così (potrebbe essere case-sensitive)?
sicuro che sia proprio all'interno di quel PlaceHolder che tu riprendi e non sia dentro un altro PlaceHolder o inserito dentro qualche controllo tipo Repeater o qualche GridView che ti creano problemi?

altrimenti posta i file che danno i problemi così posso fare delle prove sul campo e non così solo teoricamente... xd

zseven Profilo | Senior Member

ciao Gho5t,
ti riporto proprio la situazione delle pagine, spero possa esserti utile:

Default.aspx
<asp:PlaceHolder ID="PlcRicerca" runat="server"></asp:PlaceHolder>

Default.aspx.vb
Dim Ricerca As UserControl = LoadControl("/include/inc_ricerca.ascx") PlcRicerca.Controls.Add(Ricerca)

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

ricerca.aspx
Dim MioPLC As Control MioPLC = PreviousPage.Controls(0).FindControl("PlcRicerca") Dim TestoAutore As TextBox TestoAutore = CType(MioPLC.FindControl("TxtAutore"), TextBox) TxtAutoreHidden.Text = TestoAutore.Text

L'errore come ti dicevo e sulla riga TxtAutoreHidden.Text

Spero tu riesca ad aiutarmi perchè sono proprio imballato.

Grazie mille

Gho5t Profilo | Junior Member

Ho fatto qualche prova ed io ci sono riuscito in questo modo:
Control MioPLC = new Control(); MioPLC = PreviousPage.Controls[0].FindControl("PlcRicerca"); UserControl usrCtrl = (UserControl)MioPLC.FindControl("usrRicerca"); TextBox TestoAutore = (TextBox)usrCtrl.FindControl("TxtAutore"); TxtAutoreHidden.Text = TestoAutore.Text;
in pratica prima ricerchi il panel PlcRicerca, poi cerchi il tuo UserControl (io l'ho chiamato usrRicerca) e solo dopo puoi trovare il tuo oggetto TextBox...

zseven Profilo | Senior Member

Ciao Gho5t,
avevo provato anche questa strada, e l'ho riprovata adesso, ma purtroppo ancora nessun risultato positivo.

Questo è il codice che ho scritto in VB

Dim MioPLC As Control MioPLC = PreviousPage.Controls(0).FindControl("PlcRicerca") Dim UsrRicerca As UserControl UsrRicerca = MioPLC.FindControl("Ricerca") Dim TestoAutore As TextBox TestoAutore = UsrRicerca.FindControl("TxtAutore") TxtAutoreHidden.Text = TestoAutore.Text

Nella pagina chiamante, cioè nella default.aspx.vb, lo user control lo carico in questa maniera:


Dim Ricerca As UserControl = LoadControl("/include/inc_ricerca.ascx") PlcRicerca.Controls.Add(Ricerca)

Eppure continua a darmi l'errore alla riga

TxtAutoreHidden.Text = TestoAutore.Text

dicendo sempre: Riferimento a un oggetto non impostato su un'istanza di oggetto.

Ho sbagliato qualcosa?
Grazie infinite

Gho5t Profilo | Junior Member

credo che il problema sia che non hai definito un ID all'UserControl quando lo inserisci... quindi, quando nella pagina Ricerca.aspx lo vai a ricercare, non lo trovi perché quel controllo non ha un ID...
prova a cambiare il codice dell'inserimento dinamico dell'UserControl in questo modo:
Dim Ricerca As UserControl = LoadControl("/include/inc_ricerca.ascx") Ricerca.ID = "usrRicerca" PlcRicerca.Controls.Add(Ricerca)
dovrebbe funzionare...

zseven Profilo | Senior Member

Grandissimo!!!
Finalmente!!!

Ti ringrazio tantissimo per l'aiuto, mi hai risolto moltissimi problemi!!

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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5