ASP.NET - Что продолжается позади Оценки ()?

Я пытаюсь понять, как Оценка () работает на определенную цель. Я работаю над проектом, который я действительно не знаю, и я должен считать некоторые данные и поместить их в выпадающий список. Эти данные уже считаны и отображены в ItemTemplate. Я заметил, там читаются с помощью Оценки () метод. Что-то как:

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

Я должен знать, где Eval получает эти данные из того, для обнаружения, где я должен считать их для своего выпадающего списка! Но я действительно не понял, как это работает! Я знаю, что Eval () оценивает выражения привязки данных во времени выполнения, но где Вы думаете, что я должен смотреть на?

Спасибо

5
задан Joel Coehoorn 13 April 2010 в 15:04
поделиться

2 ответа

Это хороший ресурс: http://bytes.com/topic/asp-net/answers/447041-databinder-eval-mystification

Некоторые причины, почему стоит избегать этого: http://weblogs.asp.net/jgalloway/archive/2005/09/20/425687.aspx

Один из способов улучшения путем явного приведения: http://dotnettipoftheday.org/tips/use-explicit-casting-instead-of-databinder.eval.aspx

HTH.

3
ответ дан 14 December 2019 в 19:07
поделиться

Eval - своего рода ярлык. Однако это реальный вызов метода, в отличие от Bind , который больше похож на фрагмент кода.

Статья MSDN о Выражениях привязки данных должна дать вам действительно хороший обзор.

Проще говоря, синтаксический анализатор при чтении страницы вызывает DataBinder.Eval и передает текущий DataItem в контексте вместе со строкой, которую вы указываете. Это очень похоже на чтение столбцов из DataReader.

DataItem в контексте зависит от того, где это происходит. Например, в GridView это будет похоже на объект DataRow в DataTable, к которому был привязан GridView, но на самом деле это может быть любой объект, поскольку он работает через отражение. В случае DataRow Eval («Foo») попытается извлечь данные из столбца Foo DataRow.

Теперь вы видите, где это может пойти не так. Если DataRow перестает включать столбец Foo, тогда вызов Eval потерпит неудачу с треском, но не до времени выполнения, поскольку здесь не задействована строгая проверка типа / имени.

2
ответ дан 14 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: