2010-04-13 11 views
5

Ich versuche zu verstehen, wie Eval() für einen bestimmten Zweck funktioniert. Ich arbeite an einem Projekt, das ich nicht wirklich kenne, und ich muss einige Daten lesen und sie in die Drop-Down-Liste stellen. Diese Daten werden bereits gelesen und in einem ItemTemplate angezeigt. Ich habe bemerkt, dass mit der Eval() Methode gelesen wird. Etwas wie:ASP.NET - Was passiert hinter einem Eval()?

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

Ich muss wissen, wo Eval wird diese Daten aus, um immer zu entdecken, wo ich sie für meine Dropdown-Liste lesen sollte! Aber ich habe nicht wirklich verstanden, wie es funktioniert! Ich weiß, dass Eval() Datenbindungsausdrücke zur Laufzeit auswertet, aber wo, glaubst du, sollte ich einen Blick darauf werfen?

Danke

Antwort

2

Eval ist eine Abkürzung, Art von. Es ist ein tatsächlicher Methodenaufruf, im Gegensatz zu Bind, der mehr wie ein Code-Snippet ist. Der MSDN-Artikel Data-Binding Expressions sollte Ihnen einen wirklich guten Überblick geben.

Einfach ausgedrückt ruft der Parser beim Lesen der Seite DataBinder.Eval auf und übergibt das aktuelle DataItem im Kontext zusammen mit der Zeichenfolge, die Sie angeben. Es ist vergleichbar mit dem Lesen von Spalten aus einem DataReader.

Das DataItem im Kontext hängt davon ab, wo dies geschieht. In einer GridView wird dies wahrscheinlich wie ein DataRow-Objekt in einer DataTable sein, an das GridView gebunden war, aber es kann wirklich jedes Objekt sein, da es über Reflektion funktioniert. Im Fall einer DataRow würde Eval ("Foo") versuchen, Daten aus der Foo-Spalte der DataRow zu extrahieren.

Sie können jetzt sehen, wo dies schlecht gehen könnte. Wenn die DataRow keine Foo-Spalte mehr enthält, wird der Eval-Aufruf kläglich versagen, aber erst zur Laufzeit, da keine starke Typ-/Namensüberprüfung stattfindet.

Verwandte Themen