Eval
это ярлык, вроде. Это фактический вызов метода, в отличие от Bind
, который больше похож на фрагмент кода.
Статья MSDN о выражениях привязки данных должна дать вам действительно хороший обзор.
Проще говоря, синтаксический анализатор, когда он читает страницу, вызывает DataBinder.Eval и передает текущий DataItem в контексте вместе с указанной строкой. Это очень похоже на чтение столбцов из DataReader.
DataItem в контексте зависит от того, где это происходит. Например, в GridView это, вероятно, будет похоже на объект DataRow в DataTable, к которому был привязан GridView, но на самом деле это может быть любой объект, поскольку он работает посредством отражения. В случае DataRow Eval («Foo») попытается извлечь данные из столбца Foo в DataRow.
Теперь вы можете видеть, где это может пойти плохо. Если DataRow перестает включать столбец Foo, то вызов Eval будет с треском провален, но только до времени выполнения, поскольку не требуется строгой проверки типа / имени.