33 messaggi dal 11 giugno 2003
salve a tutti, ho il seguente problema :
ho un controllo scritto in vb che mi genera il riepilogo ordine per il mio sito.
Vorrei caricare in memoria questo riepilogo, ho usato il seguente codice ma praticamente mi carica solo il testo html perche non esegue il codice che sta sotto il blocco page_load dello user control,

questo è il codice
dim dmtext as string
Dim template As Control = Page.LoadControl("mail_ordine.ascx")

dim sw as StringWriter = new StringWriter()
dim sourcep as HtmlTextWriter = new HtmlTextWriter(sw)

template.RenderControl(sourcep)
dmtext = sw.ToString()

response.write (dmtext)

chiaramente trasformo la pagina in stringa e la stampo a video per fare delle prove...
il risultato non estrapola i dati dal db.

qualcuno può aiutarmi ?
grazie
Modificato da patrix il 15 maggio 2006 17.45 -
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
come hai scritto, il metodo RenderControl della classe base Control non scatena l'evento Page_Load di UserControl , quindi una soluzione potrebbe essere incapsulare i processi che attulmente esegui in Page_Load dentro un metodo public del tuo usercontrol , e quindi richiamare tale metodo prima di RenderControl.

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
33 messaggi dal 11 giugno 2003
scusa l'ignoranza ma come faccio a richiamare una public sub dall'esterno ? intendo nel codice che ti scritto nel post precedente ....

grazie
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
puoi richiamare una public sub "dall'esterno" (da un altro oggetto, in questo caso la tua pagina) attraverso la sintassi tuo_usercontrol.tua_sub()

il "modificatore di accesso" public rende la tua sub "richiamabile" dall'istanza di un altro oggetto , la cosa è semplice da usare e capire, ma complessa al proprio interno, ti consiglio di approfondire questi concetti per "godere" appieno del framework .

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
33 messaggi dal 11 giugno 2003
purtroppo così ho già provato io ma non funziona  ...

la sub da richiamare è chiamata CARICA().

ho provato così

dim dmtext as string
Dim template As Control = Page.LoadControl("mail_ordine.ascx")

dim sw as StringWriter = new StringWriter()
dim sourcep as HtmlTextWriter = new HtmlTextWriter(sw)

template.CARICA()

template.RenderControl(sourcep)
dmtext = sw.ToString()

ma non funziona, mi dice "BC30456: 'CARICA' is not a member of 'System.Web.UI.Control'"

grazie per la disponibilità !!!
Aiuto.
2.190 messaggi dal 04 marzo 2004
Contributi | Blog
hai ragione, dimenticanza mia :

come hai correttamente scritto, il metodo LoadControl restituisce un'istanza della classe Control , ogni UserControl eredita da Control e quindi il codice è corretto; tuttavia il metodo (public) di cui abbiamo parlato sarà esposto dal tuo UserControl , e ovviamente non dalla classe base Control; quindi in sintesi, devi fare un casting alla classe del tuo UserControl con l'approccio :

Dim template As ClasseDelTuoUserControl = CType(Page.LoadControl("mail_ordine.ascx"),ClasseDelTuoUserControl)

al posto di :
Dim template As Control = Page.LoadControl("mail_ordine.ascx")

Alessio Leoncini (WinRTItalia.com)
.NET Developer, Interactive Designer, UX Specialist, Trainer
33 messaggi dal 11 giugno 2003
GRAZIE adesso funziona perfettamente.

GRAZIE !!!!!!!

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.