Per non fermare la mia ondata positiva di post ne approfitto di parlare di un argomento dove ogni tanto incappo anch'io. Inoltre se arrivo a 100 vinco una maglietta, a 200 una cena a casa di Daniele, a 500 la community passa in mano ai bresciani: io e Andrea :-D
Comunque, tornando al DataBinding, ritengo che il mio articolo sveli alcuni retroscena importanti. Leggetelo mi raccomando ;-)
Primo caso. Un errore che capita spesso è scrivere questo:
<asp:CheckBox runat="server" Checked='<%#DataBinder.Eval(Container.DataItem, "campo") %>' />
Non c'è nulla di sbagliato, ma bisogna prestare attenzione a due cose:
- Racchiudere il tutto tra apice semplice se al suo interno usiamo le due virgolette. Ricordarsi infatti che il codice racchiuso tra <% %> è codice C# e dev'essere compilabile
- Ciò che viene restituito da Eval o comunque da ciò che sta all'interno deve ritornare (in questo caso) un tipo booleano. Il codice in fase di binding prodotto dal parser sarà:
target = ((System.Web.UI.HtmlControls.HtmlInputCheckBox)(sender)); Container = ((System.Web.UI.Control)(target.BindingContainer)); target.Checked = ((bool)(DataBinder.Eval(Container.DataItem, "campo"));
Secondo caso. Concatenare valori in fase di binding:
<asp:Label Text='ciao<%=stringa%>' runat="server" />
Questo codice non funziona come ci si aspetta perché il parser non può impostare la proprietà perché "ciao" e <%= %> andrebbero impostate in fasi diverse. Il primo imposta la proprietà in fase di preinit, e il secondo scrive stringa in fase di render. Il codice autoprodotto infatti sarà:
__ctrl.Text = "ciao<%=stringa%>";
Oppure:
<asp:Label Text='<%# stringa %> stringa 2' runat="server" />
Non funziona, perché chiediamo di impostare la proprietà stringa in fase di binding e "stringa 2" in fase di preinit. Il parser non sapendo cosa fare prenderà tutto come stringa e producerà questo codice:
__ctrl.Text = "<%# stringa %> stringa 2";
Per ottenere quel risultato dobbiamo concatenare tra i tag:
<asp:Label Text='<%# stringa + " stringa 2" %>' runat="server" />
Di nuovo guardando il codice, verrà prodotto la funzione di binding con:
target.Text = System.Convert.ToString(stringa + " stringa 2");
Spero siano informazioni utili per voi.
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- LINQ, lazy loading e architettura, l'11 marzo 2011 alle 18:42
- MetadataDiffViewer: aggiornato al .NET Framework 4.0, Silverlight 4.0 e Sharepoint 2010, il 7 gennaio 2010 alle 13:58
- .NET Framework 4.0 beta 1: Windows Communication Foundation, il 18 maggio 2009 alle 16:00
- Parallelizzare in Silverlight 2.0, il 21 aprile 2009 alle 00:25
- Silverlight: performance dell'isolated storage, il 16 aprile 2009 alle 17:38
- MetadataDiffViewer: differenze tra i framework, il 15 aprile 2009 alle 18:56