Percorsi immagini; differenze tra Server controle e HTML control

lunedì 03 marzo 2008 - 15.44

ravalon Profilo | Expert

Salve

Nel mio sito per utilizzare il giusto percorso del tema da me utilizzato per le immagini ho usato una cosa di questo tipo

<img src=<%#ImgPath & "btnRegistrati.gif"%>

Dove ImgPath è una variabile dichiarata a livello di MODULO visibile ovunque e valorizzata con un valore del tipo

App_Themes/DefaultTheme/images/

In questo modo riesco, a seconda del tema selezionato, a visualizzare le immagini col giusto percorso

Avevo provato con un percorso relativo alla vecchia maniera del tipo

<IMG SRC="/images/immagine.jpg">

ma non so perchè non mi funziona...

la mia domanda è questa....

Per gli HTML control e per parecchi server control riesco a utilizzare il metodo sopraesposto senza problema...
Invece per alcuni server control, specie se si trovano dentro a degli UserControl, mi è toccato usare degli SKIN specifici altrimenti non mi visualizzava le immagini

Che differenza c'è e come mai succede questo diverbio per la visualizzazione delle immagini ???

freeteo Profilo | Guru

ciao,
diciamo che i controlli html normali,sono renderizzati direttamente dal tuo browser, quindi tutto quello che c'e' scritto deve essere correttamente visto dalla tua macchina, e soprattutto è relativo a quel tag che sta renderizzando, quindi con eventuali percorsi relativi (a meno che ovviamente non gli dai un url assoluto e quindi è indipendente dalla pagina visualizzata in quel momento).

I controlli "lato server" (<asp: ... runat="server" />) sono prima elaborati dal motore di asp.net, il quale legge le proprieta' relative, e renderizza poi dei tag html corretti.
Percio' in questa situazione ti puoi trovare proprieta' diverse che non sono attributi html, ma sono stati creati a Redmond e servono poi al motore per saper che attributo html (quindi del linguaggio html puro) deve essere renderizzato.
Infatti puoi trovarti tipo "ImageUrl" che corrisponde a "src" e via cosi'.
In questa fase i percorsi ad esempio, sono sistemati automaticamente, infatti il path che tui dai ad esempio proprio ad un tag immagine è relativo al tag immagine (che appunto è un "<asp:Image..." e non "<img..." perche' deve essere preso in carico da asp.net e rederizzato in img ma con le proprieta' giuste)

Tutto questo per dirti che io valuterei l'utilizzo di un tag asp:Image, e magari nel load andare a comporre il path dell'immagine con il thema scelto dall'utente, cosi' se è dentro a qualche usercontrol, il path è relativo a quello.
Infatti controlla il fatto di mettere " runat="server" " a quei tag e vedere se escono le immagini (devono se il path che hai messo è relativo al controllo che lo contiene)


Un'altra tecnica che si addice proprio al fatto dei temi, (e che io cerco di usare il piu possibile dove riesco) è lavorare con i css, dove il path delle immagini che metti è relativo al foglio di stile, quindi gia' soggetta al fatto di avere un theme od un altro impostato a livello di pagina.
Se vuoi simulare l'immagine a sinistra di un testo ad esempio, puoi metterla come sfondo con "background:url('...gif')" e poi metterci anche un "padding-left" che ti sposti il testo a destra per visualizzare l'immagine...

Io spesso faccio degli stili che ricalcano i valori di alcuni enum, e poi non faccio altro che mettere il nome dell'Enum come "class" del tag che mi interessa, quindi risparmio anche del codice HTML da scrivere in tutte le pagine in cui replico spesso ste informazioni

ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

ravalon Profilo | Expert

Preferivo non usare i server control perchè li ritenevo più pesanti....la dove posso quindi uso gli html normali....sbaglio in questa considerazione ?

Via CSS significherebbe creare un valore per ogni cosa e mi sembra oneroso...un po come con gli SKIN dove per ogni cosa devi creare un valore....

Con la TILDE, ho fatto cosi

un semplice controllo image con la proprietà

ImageUrl="~/images/Contatti.gif"

Ma me lo segna errore....e non si vede l'immagine perchè nel percorso non viene incluso il path relativo al TEMA utilizzato....

Per rispondere alla proposta di valutare la costruzione del path del tema, è proprio cosi che faccio, nel LOAD della master page, e infatti funziona ma noto questa differenza tra gli html control normali dove funziona e i server control, dove mi tocca usare gli skin...

vorrei capire bene questa cosa....grazie per il momento

pozzoli.samuele Profilo | Senior Member

>Preferivo non usare i server control perchè li ritenevo più pesanti....la
>dove posso quindi uso gli html normali....sbaglio in questa considerazione
>?

Secondo me proprio no. Dove le immagini sono statiche, usi gli html, dove devi cambiarle usi gli asp:image

>
>Via CSS significherebbe creare un valore per ogni cosa e mi sembra
>oneroso...un po come con gli SKIN dove per ogni cosa devi creare
>un valore....
>
>Con la TILDE, ho fatto cosi
>
>un semplice controllo image con la proprietà
>
>ImageUrl="~/images/Contatti.gif"
>
>Ma me lo segna errore....e non si vede l'immagine perchè nel
>percorso non viene incluso il path relativo al TEMA utilizzato....

Esatto. Ce lo devi scrivere! la tilde ti riporta alla root del sito! Cioè, sei in <root>\novità\check-up\check-up.aspx e scrivi "~/images/img.jpg", a runtime è come se tu avessi scritto "<root>/images/img.jpg". La cosa bella è che è così anche se sposti la pagina, nel sito, un giorno...

>
>Per rispondere alla proposta di valutare la costruzione del path
>del tema, è proprio cosi che faccio, nel LOAD della master page,
>e infatti funziona ma noto questa differenza tra gli html control
>normali dove funziona e i server control, dove mi tocca usare
>gli skin...
>
>vorrei capire bene questa cosa....grazie per il momento

Gli skin modificano i server control, giusto. I server control, ricorda, vengono ricompilati e diventano dei controli html! Puoi modificarli con dei css quando sono in questo stato! Provaci.

Per fare questo, guarda il sorgente della pagina una volta che l'hai compilata e la stai vedendo nel monitor...

ravalon Profilo | Expert

Quindi è corretto usare un qualcosa, tipo la variabile globale che uso io, che mi generi il percorso esatto per il tema usato....

Allora se è cosi sto seguendo la strada giusta....

Vi ringrazio per la pazienza...
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