2010-04-13 11 views
5

Sto cercando di capire come funziona Eval() per uno scopo specifico. Sto lavorando a un progetto che non conosco e ho bisogno di leggere alcuni dati e inserirli nell'elenco a discesa. Questi dati sono già letti e sono visualizzati all'interno di un ItemTemplate. Ho notato che vengono letti usando il metodo Eval(). Qualcosa di simile:ASP .NET - Cosa sta succedendo dietro un Eval()?

<ItemTemplate> 
    <a href="...=<%# Eval("foo") %>></a> 
</ItemTemplate> 

ho bisogno di sapere dove Eval sta ottenendo questi dati da per scoprire dove li dovrei leggere per la mia discesa! Ma non ho davvero capito come funziona! So che Eval() valuta le espressioni di associazione dei dati in fase di esecuzione ma dove pensi che dovrei dare un'occhiata?

si

risposta

2

Eval è una scorciatoia, una specie di. Si tratta di una chiamata di metodo effettiva, tuttavia, a differenza di Bind, che è più simile a uno snippet di codice.

L'articolo MSDN su Data-Binding Expressions dovrebbe offrire un'ottima panoramica.

In parole semplici, il parser, quando legge la pagina, chiama DataBinder.Eval e passa nel DataItem corrente nel contesto insieme alla stringa che si sta specificando. È molto simile alla lettura di colonne da un DataReader.

DataItem nel contesto dipende da dove sta accadendo. In, ad esempio, un GridView, questo sarà probabilmente come un oggetto DataRow in un DataTable a cui GridView era associato, ma può essere qualsiasi oggetto visto che funziona tramite riflessione. Nel caso di un DataRow, Eval ("Foo") tenterebbe di estrarre i dati dalla colonna Foo di DataRow.

Ora puoi vedere dove potrebbe andare male. Se il DataRow smette di includere una colonna Foo, la chiamata di Eval fallirà miseramente ma non fino al runtime poiché non è coinvolto alcun tipo di controllo di tipo/nome.

Problemi correlati