К какому классу относится функция привязки данных ()? - PullRequest
1 голос
/ 23 октября 2011

Функция одностороннего связывания данных Eval принадлежит классу DataBinder и доступна на странице с помощью метода TemplateControl.Eval, который вызывает метод DataBinder.Eval с использованием метода GetDataItem для разрешения ссылки на объект, который Выражение оценивается против, фу!

ОК ... итак, как работает функция двусторонней привязки данных Bind? К какому классу относится?

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Я хотел бы сказать, что метод Bind () нигде не был найден, даже с использованием Reflector.

--- для значений чтения-записи, таких как TextBoxes (также известный как «двусторонняя привязка данных»), вы можете использовать оператор Bind (). Откуда взято это утверждение Bind ()?

В частности, в ASP.NET нет метода привязки! Когда ASP.NET анализирует ваш файл и обнаруживает, что вы используете databinding expression (in the angle-bracket-percent-pound format, "<%# %>"), он имеет специальный код для анализа синтаксиса Bind и генерирует для него специальный код. Когда вы используете <%# Bind("Name") %>, это не настоящий вызов функции.

Если ASP.NET анализирует код и обнаруживает оператор Bind (), он разделяет оператор на две части. Первая часть - это односторонняя часть привязки данных, которая в конечном итоге представляет собой обычный вызов Eval (). Вторая часть - это обратная часть, которая, как правило, представляет собой некоторый код в строках "string name = TextBox1.Text", который возвращает значение туда, откуда оно было связано.

Операторы привязки данных не-Bind () являются буквальным кодом (мы используем CodeSnippetExpressions в CodeDom), поэтому допускается произвольный код на выбранном вами языке. Однако, поскольку ASP.NET должен анализировать операторы Bind (), двусторонняя привязка данных не поддерживает ничего, кроме Bind (). Например, следующий синтаксис недопустим, поскольку он пытается вызвать произвольный код и одновременно использовать Bind (): <%# FormatNameHelper(Bind("Name")) %>

Единственными поддерживаемыми форматами при двусторонней привязке данных являются Bind («поле») и Bind («поле», «строка формата {0}»). В этих примерах синтаксиса есть несколько очень незначительных изменений, например, допускается использование одинарных кавычек, а не просто двойных кавычек. Поскольку некоторые языки, поддерживаемые ASP.NET, предпочитают один формат другим, мы должны поддерживать оба формата, хотя используемый вами язык может поддерживать только один.

1 голос
/ 23 октября 2011

Насколько я могу судить, "Bind" - это не метод, а скорее языковая конструкция.Источник и дальнейшее чтение: http://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx

...