Più WebForm, un CodeFile

venerdì 13 luglio 2007 - 12.01

Simon3 Profilo | Newbie

Ciao a tutti.. Ho un problemino.

In pratica ho 3 pagine ".aspx" che puntano tutte ad un unico file ".cs".

Ho controlli differenti nelle 3 pagine, però li riesco tutti a recuperare dal file .cs, quindi riesco a lavorarci su e ad effettuare tutte le operazioni possibili.

Quando mando in run l'applicazione web, mi da errore, dicendomi che la classe non contiene una definizione per i controlli.


Errore: 'nome_classe' non contiene una definizione per 'nome_controllo'.


Come posso evitare questa cosa?
Grazie

Wamba Profilo | Expert

ciao Simon,
Scusa se te lo dico, ma credo che tu faccia un errore progettuale.
Perchè usi un solo file cs?
Se il problema è che ci sono delle funzioni comuni che non vuoi duplicare la soluzione potrebbe essere l'ereditarietà.
Ovvero crei 3 file aspx ed i relativi cs. Creai una classe che eredita dalla classe page (quella da cui ereditano tutte le pagine) che chiamiamo "basepage". entri sui 3 cs delle tue pagine e le fai ereditare da basepage anzichè da page. Poi puoi andare ad inserire le funzioni comuni direttamente dentro basepage.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

Simon3 Profilo | Newbie

In pratica ho un file cs perché ho bisogno di 3 step per fare quello di cui ho bisogno.

La prima pagina aspx riempie dei controlli.
La seconda pagina aspx riempie altri controlli.
La terza pagina aspx ha in visualizzazione i controlli di pagina 1 e 2.

Al click di un bottone in terza pagina, vengono presi i controlli in pagina 1 e 2 e vengono eseguiti mediante una funzione e inseriti in un database.

Ecco il motivo dell'utilizzo di un solo file cs.

Come potrei risolvere?

Wamba Profilo | Expert

Utilizzando la proprietà Page.PreviousPage.FindControl("Iddelcontrollo");
in altre parole puoi andare a leggere i valori che aveva la pagina che ha chiamato la pagina attuale.

Esempio scritto a mano (non testato).
Voglio sapere cosa c'era scritto nella TextBox con id "MiaTextBox" della pagina che mi ha chiamato.

TextBox TxtB = (TextBox)Page.PreviousPage.FindControl("MiaTextBox"); a = TxtB.Text;

Mi pare che lavori anche a 3 livelli quindi dall'ultimo step potrai recuperare i valori delle pagine precedenti con:
Step1 Page.PreviousPage.PreviousPage.FindControl("Iddelcontrollo");
Step2 Page.PreviousPage.FindControl("Iddelcontrollo");
Step3 Normale accesso ai controlli della pagina.

Attenzione a una cosa: FindControl restituisce un generico "control" quindi è necessario fare un cast per accedere alle proprietà.

PreviousPage: http://msdn2.microsoft.com/en-us/library/system.web.ui.page.previouspage.aspx
Metodo FindControl: http://msdn2.microsoft.com/en-us/library/system.web.ui.page.findcontrol.aspx

Se hai dubbi chiedimi pure.


-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

PS: Spero che tu non ti sei offeso per "L'errore progettuale" intendevo dire che non mi sembrava la strada giusta

Simon3 Profilo | Newbie

Grazie per le dritte, solo che riscontro dei problemi:

protected void Page_Load(object sender, EventArgs e) { if (Page.PreviousPage != null) { TextBox SourceTextBox = (TextBox)Page.PreviousPage.FindControl("txt_titolo_notizia"); string a = SourceTextBox.Text; } }

Allora:
per prima cosa passo dalla pagina origine a quella corrente con un "Response.Redirect("nome_pag");" e non mi entra nel ciclo "Page.PreviousPage != null".

Quando elimino il ciclo, facendolo eseguire direttamente, mi da errore su "TextBox SourceTextBox = (TextBox)Page.PreviousPage.FindControl("txt_titolo_notizia");" dicendo che l'oggetto non è istanziato (credo in quanto non veda la PreviousPage).

Che fare?

Wamba Profilo | Expert

Suppongo che l'utente navighi fra gli step attraverso dei pulsanti.
Perchè allora non usare la proprietà PostBackUrl Property al posto del response.redirect?
Qui trovi tutte le informazioni con un esempio che sembra calzare a pennello:
http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.button.postbackurl(VS.80).aspx
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

Simon3 Profilo | Newbie

Grazie per il PostBack..

Ora l'unico errore che mi rimane è questo:


892x271 60Kb


Grazie in anticipo!

Wamba Profilo | Expert

Così è dura!
Ho visto un placeHolder e una masterpage. Fossi in te proverei a cercarlo in base all'architettura.
Ovverro Ho una textbox che è dentro un Pannel che è dentro un PlaceHolder. Bene, se non trovo il textbox all'ora vado diretto a cercare Pannel o il PlaceHolderContente e mi sfoglio la lista dei Controls che sono registrati all'interno e così via per ogni contenitore fino a trovare il textbox. Questo è un metodo pratico anche se non perfetto
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

Simon3 Profilo | Newbie

A mente fresca e dopo un week-end al mare tutto sembra funzionare..!!

Grazie per l'aiuto!

Wamba Profilo | Expert

di niente!
PS: il ritardo di questo messaggio è da attribuire a... FERIE
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5