Richiamare metodo classe nel codice della finestra di progettazione

mercoledì 31 dicembre 2008 - 17.46

sfvaleriano Profilo | Newbie

Salve....

forse perchè sono quasi le 18 dell' del 31 dicembre ma nn riesco ad uscirne, ecco il problema.
Ho un classe con un metodo, es:

Namespace GlobalUtility
Class MiaClasse

public function MiaFunzione() as string
return "stringa"

end function

end class
end namespace

Nella pagina prova.aspx invece avrò ad esempio un etichetta.

<asp:Label ID="Label1" runat="server" Text="<%# MiaClasse.MiaFunzione() %>"></asp:Label>

ma non funziona......

Come posso richiamare quindi il metodo della funzione nel codice della finestra di progettazione
e non nel codefile associato???

Sto uscendo passo tra i vari <%= ... %> <%# ... %> <%$ ... %> quali sono le differenze???

Auguri a tutti!
Valeriano




rossimarko Profilo | Guru

Ciao,

per far funzionare il codice <%# %> devi richiamare il metodo databind del tuo controllo, perchè il simbolo di cancelletto indica quel codice che viene richiamato durante il databind. Se il tuo controllo fosse dentro ad esempio ad un repeater di cui hai fatto il databind funzionerebbe (il databind è valido per tutti gli oggetti contenuti), ma se sei all'interno della pagina allora devi forzare tu la chiamata.

Se invece usi <%= %> allora considera che la funzione viene richiamata durante la creazione del response della pagina però è valida quando il tuo controllo non è runat="server"
Se quindi devi semplicamente visualizzare un testo puoi scrivere:
<span><%= MiaFunzione() %></span>

-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

sfvaleriano Profilo | Newbie

bhe il problema è che io devo utilitarre con controllo che può ad esempio essere
un asp:label runtat="server"

In tal caso quindi come posso fare?

Se scrivo:
<asp:Label ID="Label1" runat="server" Text="<%= MiaFunzione() %>"></asp:Label>

nella pagina html ottengo:

....
<span id="Label1"><%= pippo() %></span>
....

qual'è il metodo corretto?

rossimarko Profilo | Guru

Allora da codice devi richiamare il databind della label:
Label1.DataBind()

e poi nell'aspx puoi inserire Text="<%# TuaFunzione() %>"
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

sfvaleriano Profilo | Newbie

ok in questo modo funziona....

nel codefile
Protected Sub Page_Load
Label1.DataBind()
End Sub

nella pagina aspx
<asp:Label ID="Label1" runat="server" Text="<%# MiaFunzione() %>"></asp:Label>

risultato:
<span id="Label1">il mio testo</span>

Questo metodo comunque mi lascia perplesso....



rossimarko Profilo | Guru

Perchè ti lascia perplesso?

Il discorso è molto semplice, nel momento in cui dichiari un controllo runat="server" si presume che tu lo userai da codice, e quindi per popolare la proprietà text scrivi il codice corretto nelle funzioni della pagina.

Un discorso a parte riguarda il databinding, perchè potrebbe capitare che il controllo faccia parte di un controllo su cui è stato fatto il databind, quindi per gestire questi casi è stata introdotto il simbolo # che gestisce queste logiche in controlli annidati. Nel tuo caso infatti forzando il DataBind funziona. Volendo potresti farlo sulla pagina ma rischi di modificare il comportamento di tutti gli altri controlli. Qui trovi un approfondimento sul discorso: http://support.microsoft.com/kb/307860

In alternativa all'interno della pagina aspx si può usare <%= .. %> come si faceva con le pagine asp. Questa dicitura inserisce all'interno dell'html generato il risultato della funzione.

Di solito si usa la seconda opzione quando si vuole semplicemente inserire nella pagina il risultato di una funzione che va ad inserirsi in un punto specifico del codice html.

Nel tuo caso se ti serve dichiare una label perchè poi devi accederci da codice tanto vale allora fare anche il popolamento della proprietà text da codice, altrimenti non vedo proprio l'esigenza di avere una label, e allora puoi usare direttamente uno span html oppure anche nulla e visualizzare il risultato direttamente nella pagina.

<%= non funziona con i controlli runat server perchè essendo un controllo server non interpreta quanto contenuto nella proprietà text ma lo memorizza come semplice stringa.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko
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