Visibilità di un controllo personalizzato

lunedì 30 luglio 2007 - 09.20

bluelions Profilo | Senior Member

Buongiorno
Avrei bisogno di risolvere un problema:
Ho un controllo personalizzato che si trova in una cartella /controlli/nomecontrollo.ascx
Poi ho creato un file .cs che si trova nella cartella App_code e che si trova nel namespace, ora vorrei chiamare il controllo personalizzato che ho creato, dal file cs, ma non riesco a prenderne visibilità.....ci ho provato in tutti i modi possibili, ma nemmeno ombra......posso sapere come fare?
Vi posto in allegato il controllo e la classe creata.

Wamba Profilo | Expert

hai usato la direttiva @Register nella pagina chiamante?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

bluelions Profilo | Senior Member

cioè @register dove devo metterlo?
io ho tutto nel webconfig, e nelle altre pasgine aspx ad esempio basta che faccio
<ctrl:nomecontrollo> e cosi via
ma nel file cs che non ho pagina aspx, come cavolo faccio?

Wamba Profilo | Expert

Sorry, Lunedì mattina e stò un po' rincitrullito
Vediamo di capire meglio. Il file CS che cosè? Devi implementare una classe separata o è del codice comune a tutte/molte delle pagine? in ogni caso credo che devi utilizzare l'ascx come classe. In altre parole guarda come l'hai definita nel codebehind namespace e nomeclasse e prova referenziala così.

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

bluelions Profilo | Senior Member

questa è il controllo creato da me:
public partial class MailingList : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{

}
}

Questo è il file cs che da qui devo chiamare il controllo:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using xsdGenericoTableAdapters;

namespace AgroCity.UI
{

public class UI
{

public UI()
{
//
// TODO: aggiungere qui la logica del costruttore
//
}
}
}

Wamba Profilo | Expert

>questa è il controllo creato da me:
>public partial class MailingList : System.Web.UI.UserControl
>{
> protected void Page_Load(object sender, EventArgs e)
> {
>
> }
>}

Supponiamo che il NameSpace sia MyNameSpace.

>
>Questo è il file cs che da qui devo chiamare il controllo:
>using System;
>using System.Data;
>using System.Configuration;
>using System.Web;
>using System.Web.Security;
>using System.Web.UI;
>using System.Web.UI.WebControls;
>using System.Web.UI.WebControls.WebParts;
>using System.Web.UI.HtmlControls;
>using xsdGenericoTableAdapters;

/******************************/
using MyNameSpace;
/******************************/

>
>namespace AgroCity.UI
>{
>
> public class UI
> {
>
> public UI()
> {
MailingList ML = new MailingList;
{.............}
> }
> }
>}

E' un tentativo, ora non ho il tempo di fare una prova .

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

bluelions Profilo | Senior Member

Ec è quello il problema che lo vorrei istanziare, ma non lo vedo proprio

Wamba Profilo | Expert

nemmeno usando "using MyNameSpace;"?
C'è una cosa che non mi torna.
Perchè vuoi istanziare un controllo grafico in una classe logica?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

bluelions Profilo | Senior Member

perhè praticamente, vorrei crearmi dei metodi sulla base logica e che a sua volta gli passo il controllo grafico come parametro e mi ritorna la lista.

Wamba Profilo | Expert

poi a quel punto hai il problema di come inserire il controllo nella pagina.
Credo ti convenga crearti una classe in cui inserisci la logica/informazioni e lasciare nel controllo solo la parte di renderizzazione. A quel punto nella pagina carichi la logica la setti come vuoi (anche dal file cs) e poi la passi al controllo.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

bluelions Profilo | Senior Member

eh, ma io questo voglio fare.....se ci riuscissi....

Wamba Profilo | Expert

Allora la parte "logica" è il file .cs?
Se è così l'errore è nel referenziare nella parte logica la parte grafica, deve essere il contrario. Se vuoi mi spiego meglio.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

bluelions Profilo | Senior Member

ok, dimmi

Wamba Profilo | Expert

Teoricamente ci sono 3 oggetti: La classe con la logica, che di fatto rappresenta l'entità nel tuo caso MailingList (ML), la classe che si occupa di dare una rappresentazione grafica all'entità, ovverro il controllo utente (UC) ed infine la pagina che la deve renderizzare il controllo (P).

Nella classe ML devo esistere tutti i metodi e le proprietà che rappresentano la tua entità, che sò una collection con gli indirizzi degli iscritti, i metodi per recuperare questi indirizzi dal db e per inviare le mail ecc. (Ovviamente stò ipotizzando la tua classe potrebbe fare tutt'altro).

Il nostro controllo utente dovrà avere una property di tipo Mailing list che dovrà essere passata dall'esterno o creata nel costruttore, dipende dalla logica. Tutte le operazioni di renderizzazione dovranno utilizzare ML per il recupero dei dati. Altri elementi strettamente legati all'oggetto da renderizzare come l'altezza il colore di sfondo ecc, faranno parte di UC.

Infine nella pagina nel lato "HTML" inserisci il controllo UC.
Se c'è bisogno nel Codebehind crei un'istanza di ML, fai gli opportuni settaggi e la passi all'istanza di UC, facendo riferimento all'id che hai scritto nel tag.

Questa potrebbe essere a grandi linee l'ìarchitettura. Se hai bisogno di ulteriori informazioni chiedi pure.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba

bluelions Profilo | Senior Member

scusami secondo me mi sono espresso male, allora io devo avere la necessita di utilizzare il mio controllo ascx (mailinglist) in una nuova classe.
Solitamente si fa nomecontrollo mmm = new nomecontrollo()
ma questa sintatti non va, riesco ad istanziare tutti gli oggetti webcontrols e non il mio controllo. Tutto qua....
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