Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 1.0/1.1
Menu .ascx multiutente
venerdì 12 settembre 2003 - 16.43
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
ven 12 set 2003 - 16:43
Oggi il problema è questo...
Come sai... mi son creato un "template" della mia pagina .aspx,
composta dal corpo centrale e dai menu laterali e l'intestazioni con 3 file .ascx
che includo nella pagina
es: <%@ register tagprefix="includi" tagname="testata" src="include/testata_alto.ascx"%>
ho poi i menu (menu di sx e menu di dx), il menu di sx in funzione dell'utente che entra nel sito
attraverso un form di autentificazione puo' vedere o menu dei link del menu_sx.
La pagina menu_sx.ascx è puro html statico, potrei creare un menu_sx_user.ascx ma come fare
a fare il controllo sull'accesso e far caricare nel mio template il file menu.ascx relativo a quell'utente
vi ringraziooo
ciao!!!
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
ven 12 set 2003 - 16:54
usi l'autenticazione di ASP.NET (forms authentication)?
Se è sì, allora hai a disposizione l'oggetto HttpContext.Current.User (che è anche esposto come proprietà direttamente in page o in usercontrol, e quindi puoi riferirti ad esso semplicemente con this.User o me.User)
Con User.Identity.Name ti viene restituito lo username dell'utente corrente... quello che hai settato al momenti del login.
Con User.Identity.IsInRole("nomeruolo"), puoi invece testare se l'utente appartiene ad un determinato gruppo di utenti (ad es. administrator) o meno.
Ecco la reference a tutto ciò di cui ti sto parlando:
http://msdn.microsoft.com/library/en-us/cpguide/html/cpconthecookieauthenticationprovider.asp?frame=true
Buon lavoro.
Ciao
Stefano Giannone [MCP .NET]
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
ven 12 set 2003 - 17:08
OK! ma il problema è come caricare la menu.ascx nel mio template con l'include
in funzione del'utente...
ti ringrazio
ciao
nb
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
ven 12 set 2003 - 17:19
ah ok ... scusa ma avevo capito male la domanda (devo dire che non eri stato chiarissimo ;-)) )
Allora... per caricare dinamicamente un controllo dentro un altro controllo esiste l'istruzione:
objCtrlPadre.Controls.Add( Page.LoadControl("/dir/controllo.ascx") )
dove objCtrlPadre è il riferimento al controllo in cui deve essere caricato dinamicamente l'ascx.
In pratica, se hai creato un template con una table html... ti basterà mettere un runat="server" alla td, in questo modo potrai riferirti a questa da codice server. Altrimenti potrai inserire all'interno della <td> uno speciale controllo che si chiama:
<asp:PlaceHolder id="objCtrlPadre" runat="server" />
Questo controllo di sè non renderizza nulla, ma serve soltanto come segna posto per il caricamento dinamico di controlli.
Spero di esserti stato d'aiuto. Ciao, alla prossima.
Stefano Giannone [MCP .NET]
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
ven 12 set 2003 - 17:26
Quante cose in un colpo... help!
grazie stefano! hai ragione... spiego malissimo!
Ho difficoltà a capire il mio .NET non è avanzatissimo... cmq,
all'accesso tramite un form devo caricare nel mio template (tabella htm in cui
includo i miei .ascx) dei file menu.ascx differenti in funzione dell'utente.
Pero il file menu_dx.ascx è in comune ha tutti devo gestire anche quello se no i link mi riportano al template con menu_sx dell'admin verso l'utente user...
in funzione di cose carico i menu.ascx ?? il controllo su cosa lo faccio, ho un campo nel mio db che specifica l'utente (user, admin e superadmin)...
grazie ancora
nb
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
ven 12 set 2003 - 17:33
rivedi la risposta che ti ho dato nel post precedente... puoi utilizzare User.Identity.IsInRole("admin") anche nell'ascx, e quindi far renderizzare i vari link in base al tipo di utente che lo sta caricando.
Ciao
Stefano Giannone [MCP .NET]
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 10:49
scusa la domanda....
nella pagina .aspx dove va messo?
objCtrlPadre.Controls.Add( Page.LoadControl("/dir/controllo.ascx") )
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 11:10
Ok! son riuscito!
chiedo na cosa... il problema adesso caricare SOLO nel <td> della mia tabella
le pagine .ascx (menu_utente.ascx, menu_admin.ascx, menu_sadmin.ascx)
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
lun 15 set 2003 - 11:15
è del codice VB.NET, va messo nella .aspx.vb (se usi il code-behind e VS.NET).
Ovviamente non posso dirti il punto esatto del tuo codice in cui inserire l'istruzione, per un semplice motivo: non so com'è il tuo codice.
Cmq mi sembra che non sia difficile capire che quella istruzione va messa dentro qualche IF, che controlla magari se l'utente è in un determinato ruolo o meno.
Ciao
Stefano Giannone [MCP .NET]
P.S. Da un'occhiata alle fondamenta di ASP.NET, cercando di capire come funziona. Il concetto di controlli, controlli innestati in altri controlli, etc. Altrimenti difficilmente riuscirai a capirci qualcosa.
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
lun 15 set 2003 - 11:17
non ho capito. In cosa sei riuscito ?
Qual'è la domanda ??
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 11:25
Grazie stefano! sono riuscito ad inserirlo il problema è ricaricare nel mio template
di pagina (nella td della mia tabella) solo il menu relativo all'utente che si è "loggato",.... il menu mi si ricarica a tutta pagina... non nel template!
come fare??
ho fatto cosi':
code:
objCtrlPadre.Controls.Add(Page.LoadControl("include/menu_control.ascx"))
html:
<TD><asp:PlaceHolder id="objCtrlPadre" runat="server" /></TD>
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
lun 15 set 2003 - 11:32
in questo caso il controllo ascx viene caricato dentro il placeholder...e quindi dentro la <td>... adesso devi essere tu a settare le giuste dimesioni di larghezza e altezza della <td> (che non vedo specificate).
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 11:42
menu_control.ascx :
dal form di accesso passo id utente e mi leggo il "tipo" di account utente nel DB...
poi la pagina prosegue cosi':
'Lettura del MODO di accesso (User, Admin, SAdmin)
if reader1.read() then
tipo_accesso = reader1("TipoAccount")
'Accesso per SuperAdmin
if tipo_accesso = "SAdmin" then
response.redirect("menu_sx_s_admin.ascx?IDUtente=" & IDUtente)
else
'Accesso per Admin
if tipo_accesso = "Admin" then
response.redirect("a1.html")
else
'Accesso per User
response.redirect("menu_sx_user.ascx?IDUtente=" & IDUtente)
end if
end if
end if
il response.redirect... (è corretto?) voglio che mi carichi il mio menu_XX.ascx nel template di pagina dove ho il mio placeholder...
grazie per l'aiuto!!!!!!!!!
nicola
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
lun 15 set 2003 - 12:53
devi sostituire le response.redirect con i Controls.Add( LoadControl( ... ) )
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 14:26
NON FUNZIONA!
mi sai aiutare ....????
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
lun 15 set 2003 - 14:37
mi viene difficile aiutarti se mi dici soltanto "NON FUNZIONA"
Da quanto mi risulta... quello che ti ho descritto funziona alla perfezione... ed è una tecnica molto utilizzata.
Non ha nessun senso fare dei redirect sull'ascx, perchè gli ascx sono dei controlli e non delle pagine.
Per caricare dinamicamente gli ascx si usa Page.LoadControl("miocontrollo.ascx")... questo metodo ritorna un oggetto di tipo Control, che rappresenta l'istanza dell'ascx.
A questo punto puoi utilizzare tale istanza per inserirla come "sotto-controllo" di un controllo padre (nel tuo caso il placeholder) utilizzando:
controlloPadre.Controls.Add(istanzaAscx)
Prova a studiare il metodo su MSDN:
http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebuitemplatecontrolclassloadcontroltopic.asp?frame=true
in basso trovi anche un esempio di codice.
Non so come spiegarmi meglio, mi spiace.
Ciao
Stefano Giannone [MCP .NET]
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 15:06
Chiedo scusa.
Ma perdonami ma mi riesce difficile capire.
Il problema è che io ho 3 pagine diverse .ascx da caricare nel mio template
in funzione dell'utente. in che modo ridirezione i 3 "link" ? io ho creato una pagina ulteriore .ascx che fa il controllo, che dovrò caricare ad ogni pagina del mio sito.
scusate ancora!
ciao Nicola
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
lun 15 set 2003 - 15:48
secondo me ti riesce difficile capire perchè non hai le basi di asp.net... continui a riferirti agli .ascx come "pagine", invece pagine non sono.
Quindi non posso che continuare a ripeterti che non hai nulla da ridirezionare, perchè non devi ridirezionare, ma "caricare"... con il Page.LoadControl.
Ti consiglio di fare un giro sul quickstart tutorial di asp.net:
http://it.gotdotnet.com/quickstart/aspplus/
e di comprare un buon libro su ASP.NET. Ti posso consigliare:
Professional ASP.NET
http://www.amazon.com/exec/obidos/ASIN/0764543962/qid=1063633356/sr=2-1/ref=sr_2_1/104-3722566-8512707
Ciao
Stefano Giannone [MCP .NET]
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 16:48
il problema è che devo "caricare" attraverso un primo controllo (tipo utente) 3 controlli figli diversi (i 3 menu utente).
grazie per l'aiuto
nicola
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
lun 15 set 2003 - 17:01
allora... il <asp:PlaceHolder id="objCtrlPadre" runat="server" /> dovrai metterlo dove vuoi che venga posizionato l'ascx caricato dinamicamente.
Ora... non importa se hai un ulteriore ascx... il placeholder puoi metterlo lì dentro, insieme al codice necessario per caricare dinamicamente l'altro ascx ed aggiungerlo a objCtrlPadre.Controls
Quindi non vedo il problema.
Ciao
Stefano
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 17:09
<asp:PlaceHolder id="objCtrlPadre" runat="server" /> in questo devo caricare .ascx di controllo account utente ma come faccio poi a caricare dinamicamente .ascx relativi al tipo di account (menu_sx_admin.ascx, menu_user.ascx) come lego il controllo con il caricamento dei menu_xx.ascx.
grazie per l'aiuto che mi dai
nicola
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 17:39
il placeholder è il segnaposto per caricare i controlli dinamici (nel mio caso i 3 menu_sx.ascx), nel placeholder io faccio riferimento al caricamento del controllo menu_control.ascx, il mio problema a questo punto caricare i menu_sx ....
dinamicamente.
grazie
nicola
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
lun 15 set 2003 - 17:48
beh dentro menu_control.ascx metti un altro placeholder , no ??!?!
E dentro menu_control.ascx metti il codice che ti serve a caricare i diversi menusx dentro il placeholder ... cio il famoso Page.LoadControl, con controls.add
Se riesci a caricare dentro il placeholder che sta nella pagina, riuscirai a caricare anche in quello che sta dentro l'ascx... un pò di ingegno, non posso mica dirti tutto io.
Ciao
Stefano
Nicola
Profilo
| Senior Member
362
messaggi | Data Invio:
lun 15 set 2003 - 18:25
Ok! fatto!
grazie ancora!!!
ciao Nicola
Admin
Profilo
| Junior Member
160
messaggi | Data Invio:
lun 15 set 2003 - 18:33
fffiu... finalmente ce l'abbiamo fatta! :-)
Ciao!
Stefano
Torna su
Stanze Forum
Elenco Threads
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 !