Scrivere codice dinamico nel markup dei controlli

sabato 08 settembre 2007 - 13.33

ravalon Profilo | Expert

Salve a tutto lo splendido forum che mi ha già aiutato moltissimo

Una domanda...in ASP classic potevo inserire <%=variabile%> dentro ad una proprietà del codice HTML

In ASP-NET 2.0 non me lo fa fare perchè dice che tale costrutto non può essere utilizzato

Come faccio allora a impostare ad esempio la dimensione massima di una tabella secondo il valore contenuto in una mia variabile ???

alx_81 Profilo | Guru

>Salve a tutto lo splendido forum che mi ha già aiutato moltissimo
Ciao e grazie per lo "splendido forum"
>
>Una domanda...in ASP classic potevo inserire <%=variabile%>
>dentro ad una proprietà del codice HTML
>In ASP-NET 2.0 non me lo fa fare perchè dice che tale costrutto
>non può essere utilizzato
>Come faccio allora a impostare ad esempio la dimensione massima
>di una tabella secondo il valore contenuto in una mia variabile???
Potresti dare un ID ad una tabella, specificando l'attributo runat="server" sulla tabella stessa. Così come segue:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

In questo modo sul codice lato server potrai utilizzare l'oggetto proprio come se fosse ad esempio un <asp:Button> o un <asp:TextBox> poichè viene creata l'istanza a runtime di tutti i controlli definiti come runat="server".
Supponiamo di voler cambiare dinamicamente al click di un bottone la larghezza della tabella. Procederemo così:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Quindi all load la tabella è larga 100 e dopo il click 100 * 3 = 300 pixel..
Tu potresti fare tutto nella load, valorizzando la proprietà width della tua tabella con la tua variabile, ma il discorso non cambia

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Preferirei non gestire la cosa nell'evento Load , bensì avere una variabile globale e impostarla come valore di una proprietà

Ma il mio dubbio grande è....quello che una volta potevo fare con una cosa del tipo

<TABLE WIDTH="<%=Variabile%>">

Oggi non lo posso più fare direttamente...non c'è una sintassi che accetti codice ASP dentro le proprietà ??

alx_81 Profilo | Guru

>Preferirei non gestire la cosa nell'evento Load , bensì avere
>una variabile globale e impostarla come valore di una proprietà
>
>Ma il mio dubbio grande è....quello che una volta potevo fare
>con una cosa del tipo
>
><TABLE WIDTH="<%=Variabile%>">
>
>Oggi non lo posso più fare direttamente...non c'è una sintassi
>che accetti codice ASP dentro le proprietà ??
allora, se proprio vuoi fare così, lo fai allo stesso modo di prima..
dichiari una variabile pubblica o protetta e scrivi come hai scritto tu..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Il fatto è che su codice HTML classico funziona, ma dentro i web control di ASP.NET non funziona il costrutto <% %> e da errore...come posso ovviare ?

alx_81 Profilo | Guru

>Il fatto è che su codice HTML classico funziona, ma dentro i
>web control di ASP.NET non funziona il costrutto <% %>
>e da errore...come posso ovviare ?
potresti mandarmi il codice aspnet? sia della page sia del controllo?
tu mi avevi parlato di table.. non di aspnet control.. per quelli, i comportamenti sono diversi..
Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Ma...anche di un semplice controllo tipo questo


<asp:Table ID="Table1" skinid="TableNav" runat="server" Width="<%=maxWidth%>">

Non me lo prende,...

alx_81 Profilo | Guru

>Ma...anche di un semplice controllo tipo questo
>
>
><asp:Table ID="Table1" skinid="TableNav" runat="server" Width="<%=maxWidth%>">
>
>Non me lo prende,...
no, puoi fare il binding tramite attributo='<%# binder %>'.. ma quello che vuoi fare tu non te lo prende..
ma cosa c'è di così scomodo nel farlo nel pageload? alla fine ti fai la tua proprietà, la valorizzi e poi nel pageload assegni il valore all'oggetto che gira sul server..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Puoi mettermi un esempio pratico ?

alx_81 Profilo | Guru

>Puoi mettermi un esempio pratico ?
ok.. Ad esempio, in un templatefield di un gridview..

asp.net:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Quindi diciamo che il costrutto giusto è <%# %> per le proprietà dei controlli giusto ?

Ma è una formattazione valida per ogni linguaggio di ASP.NET 2.0 oppure è c# ? Si utilizza solo dentro ai controlli server ?

alx_81 Profilo | Guru

>Quindi diciamo che il costrutto giusto è <%# %> per le
>proprietà dei controlli giusto ?
è il tag che si usa per effettuare il binding ai dati.. ti serve per associare valori di un datasource ad esempio alle proprietà dei controlli
>
>Ma è una formattazione valida per ogni linguaggio di ASP.NET
>2.0 oppure è c# ? Si utilizza solo dentro ai controlli server?
è valida sia per vbnet che per c# e si usa nei controlli server..
>
>

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Ma se è per fare il binding allora non fa al mio caso....la var che voglio usare per impostare la dimensione massima in larghezza non deriva da un datasource ma da una var impostata nel Web.config

alx_81 Profilo | Guru

>Ma se è per fare il binding allora non fa al mio caso....
infatti ti dicevo due post fa che non te lo prende, quindi non ti serve..

>la var che voglio usare per impostare la dimensione massima in larghezza
>non deriva da un datasource ma da una var impostata nel Web.config
allora puoi usare le expressions, leggi bene qui
http://www.beansoftware.com/ASP.NET-Tutorials/Expression-Builder.aspx

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Avevo già visto le expression con il suo Builder...

ma a quanto pare ci avevo capito poco....ora mi è chiaro, ed è anche veloce come metodo....
mi hai risolto un problema, ma questo metodo vale solo per valori impostati sul web.config...

se invece avessi una FUNCTION nel codice che restituisce un valore ad esempio, come farei a inserire tale valore in una proprietà di un controllo ?

Dopo di questa non ti assillo più, promesso...

alx_81 Profilo | Guru

>Avevo già visto le expression con il suo Builder...
>ma a quanto pare ci avevo capito poco....ora mi è chiaro, ed
>è anche veloce come metodo....
>mi hai risolto un problema, ma questo metodo vale solo per valori
>impostati sul web.config...
eh sì, è limitata a quello
>
>se invece avessi una FUNCTION nel codice che restituisce un valore
>ad esempio, come farei a inserire tale valore in una proprietà
>di un controllo ?
Sinceramente non uso mai la "vecchia" tecnica, e seguo invece quella iniziale che ti ho proposto sfruttando l'oggetto lato server.
Anche perchè credo che la prima non sia la strada giusta da seguire, visto che la tecnologia è completamente cambiata.
>
>Dopo di questa non ti assillo più, promesso...
figurati, è un piacere
Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Grazie di tutto !!!

Ora ho alcuni dubbi su altre cose ma posterò su un altro Topic....

Ciao

alx_81 Profilo | Guru

>Grazie di tutto !!!
di nulla!
>
>Ora ho alcuni dubbi su altre cose ma posterò su un altro Topic....
cercherò di beccarti
>
>Ciao

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Ehm....

ho ancora un problema...

Sto utilizzzando la sintassi

<%$AppSettings:variabile%>

per estrarre i valori che ho nel web.config

Ora....mi si presente la necessità di estrarre una stringa....alla quale devo aggiungere il nome di un file....

tipo

<%$AppSettings:ImgPath%>Sfondo.gif

Cioè vorrei aggiungere al Path delle immagini (ImgPath) il nome del file....ma non funziona....in ASP si faceva facilissimo...come faccio qui ?

Ma tutti sti modi differenti di incapsulare dati dinamici non è fuorviante ???

alx_81 Profilo | Guru

>ho ancora un problema...
>Sto utilizzzando la sintassi
><%$AppSettings:variabile%>
>per estrarre i valori che ho nel web.config
>
>Ora....mi si presente la necessità di estrarre una stringa....alla
>quale devo aggiungere il nome di un file....
>tipo
><%$AppSettings:ImgPath%>Sfondo.gif
>
>Cioè vorrei aggiungere al Path delle immagini (ImgPath) il nome
>del file....ma non funziona....in ASP si faceva facilissimo...come
>faccio qui ?
Beh a questo punto ti consiglio di leggere il valore dal web.config lato server (con la classe ConfigurationManager), e poi concatenare sempre lato server il nome del file, abbandonando l'espressione..
>
>Ma tutti sti modi differenti di incapsulare dati dinamici non
>è fuorviante ???
Non lo trovo fuorviante.. <%# %> per il binding, <%$ %> per le espressioni..
Indicativamente preferisco ragionare lato server, lasciando il codice asp.net il più pulito possibile..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Infatti ho provato a usare

configurationmanager.appsettings.get("nomevariabile") ma non me la fa usare...

Se potessi creare un pezzo di codice o una classe o un user control che mi estrae tutti questi dati e li mette in una variabile pubblica per poi utilizzarla quando voglio sarebbe il massimo, ma causa la mia inesperienza con ASP-NET 2.0 non ci riesco

Mi puoi dire come posso fare con un piccolo esempio ??

alx_81 Profilo | Guru

>Infatti ho provato a usare
>
>configurationmanager.appsettings.get("nomevariabile") ma non
>me la fa usare...
>
>Mi puoi dire come posso fare con un piccolo esempio ??
potresti fare come segue:
[VBNet] Dim reader As New System.Configuration.AppSettingsReader() Dim valore As Int32 = Convert.ToInt32(reader.GetValue("Miachiave", GetType(Int32))) MessageBox.Show(valore) [C#] System.Configuration.AppSettingsReader reader = new System.Configuration.AppSettingsReader(); int valore = Convert.ToInt32(reader.GetValue("Miachiave", typeof(int))); MessageBox.Show(valore);
Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Ma poi come faccio a inserirlo nel markup? Con i classici <% %> ?

E come faccio a rendere quel codice con quelle variabili che mi hai messo nell'esempio pubbliche e visibili a tutte le pagine ?

Perchè nelle prove che ho fatto se dichiaro una variabile in una classe anche come pubblica, poi nella pagina mi dice che tale variabile non è stata dichiarata

alx_81 Profilo | Guru

>Ma poi come faccio a inserirlo nel markup? Con i classici <%
>%> ?
dovresti usare il binding <%# %>, ma questo ti costringe a fare lato server oggetto.DataBind().. e a questo punto, scusami, ma è meglio far tutto lato server..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

forse ho chiesto troppo presto senza essere adeguatamente preparato...vedo di studiarmi un pochino il tutto perchè allo stato attuale non so come fare quello che mi dici...grazie per ora

ravalon Profilo | Expert

MA se io usassi uno usercontrol col quale in avvio della master page mi ricavo tutti i valori del webconfig che voglio usare spesso e li inserisco in una variabile, poi posso usarla in ogni punto della pagina ?

Sarebbe una soluzione passabile ?

alx_81 Profilo | Guru

>MA se io usassi uno usercontrol col quale in avvio della master
>page mi ricavo tutti i valori del webconfig che voglio usare
>spesso e li inserisco in una variabile, poi posso usarla in ogni
>punto della pagina ?
Si purchè la bindi con gli opportuni metodi..
>
>Sarebbe una soluzione passabile ?
se vuoi proprio seguire quella strada sì .
Se li leggi dal web config, puoi sempre usare le espressioni

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

infatti preferirei, ma come ti ho detto poi non mi permette di inserire sempre il formato

<%$AppSettings:variabile%>

Come mai ?

E poi quando mi funziona, non riesco a concatenarci qualcosa...come nel caso che abbia una variabile che mi serve per il path delle immagini del tema...

A quel punto per renderizzare un'immagine, dovrei
concatenare all'espressione

<%$AppSettings:ThemeDir%>

il nome del file immagine, ma non ci riesco....c'è un modo per farlo ?

alx_81 Profilo | Guru

>infatti preferirei, ma come ti ho detto poi non mi permette di
>inserire sempre il formato
>
><%$AppSettings:variabile%>
>
>Come mai ?
>
>E poi quando mi funziona, non riesco a concatenarci qualcosa...come
>nel caso che abbia una variabile che mi serve per il path delle
>immagini del tema...
>
>A quel punto per renderizzare un'immagine, dovrei
>concatenare all'espressione
>
><%$AppSettings:ThemeDir%>
>
>il nome del file immagine, ma non ci riesco....c'è un modo per
>farlo ?
Senti, facciamo così.. passami il codice aspnet che provo..

Alx81 =)

http://blogs.dotnethell.it/suxstellino

ravalon Profilo | Expert

Gentilissimo

Trovi la pagina qui

http://www.dotnethell.it/forum/messages.aspx?ThreadID=17848

ho pensato che era superfluo ripostarla nuovamente...

Le variabili che vorrei estrarre sono nel web.config e sono essenzialmente 2

MaxWidth che è = 800px

ImgPath che è = ~/App_themes/DefaultTheme/images/

ravalon Profilo | Expert

Ad esempio...
se volessi usare una stringa da creare una volta sola per mantenere poi il valore di un associazioni di stringhe...come per esempio il percorso completo della cartella delle immagini in base al tema impostato...

Public ThemeDirectory as string
ThemeDirectory=request.ApplicationPath.ToString & "/" & ConfigurationManager.AppSettings.get("ThemeDir")

se la volessi usare in tutta la pagina quando carico una qualsiasi immagine....come diamine devo caricarla ??? ho provato in una classe, nell'evento load, tra due tag SCRIPT ma niente...mi dice che la variabile non è dichiarata....

Quindi cosi non ci riesco....

Con il metodo <%$ %> non riesco poi a concatenare il valore estratto con il nome del file grafico perchè mi da errore...

Uno dei due modi si può fare ? mi scrivete un esempio ???

ravalon Profilo | Expert

Boh...io non capisco proprio perchè debba fare tanto difficile l'unione di un

<%$AppSettings:variabile%> con una qualsiasi stringa...

ho provato in ogni modo ma niente...restituisce il nome della variabile ma non la si riesce a modificare aggiungendo come nel mio caso un pezzo di stringa

Inoltre ho provato a dichiarare una variabile nel Page_load della pagina....e se provo a utilizzarla dentro a un semplice <%=%> per vedere cosa contiene mi dice che non è dichiarata....ma come ???? l'ho dichiarata ovunque e non la prende....

Avrà anche portato grandi vantaggi questo nuovo linguaggio...ma ha reso alcune cose un pochino troppo indaginose secondo me
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