Первая часть $-выражения указывает имя построителя выражений. Например, выражение AppSettings:appName работает, потому что выделенный построитель выражений AppSettingsExpression зарегистрирован для обработки выражений, которые начинаются с AppSettings.

Аналогично ASP.NET включает ResourceExpressionBuilder для вставки ресурсов (см. главу 17) и ConnectionStringExpressionBuilder — для извлечения информации о соединении из раздела <connectionStrings> файла web.config. Вот пример, использующий ConnectionStringExpressioriBuilder:


<asp:Literal Runat="server" Text="<%$ ConnectionStrings:Northwind %>" />

Отображение строки соединения не особенно полезно. Но эта техника становится намного более важной, когда вы комбинируете ее с элементом управления SqlDataSource, который мы рассмотрим далее в этой главе. В этом случае вы можете использовать ее для быстрого применения строки подключения, полученной из файла web.config:

<asp:SqlDataSource ConnectionString="<%$ ConnectionStrings:Northwind %>" ... />

Технически $-выражения не включают привязки данных. Но они работают аналогичным образом и имеют похожий синтаксис.

Пользовательские построители выражений

Одно иэ наиболее новаторских средств $-выражений является возможность создания собственных построителей выражений, которые подключаются в этот каркас. Это специализированная техника, довольно изящная, но не всегда практичная. Как вы увидите, пользовательское $-выражение имеет наибольший смысл,
если вы разрабатываете какое-то исключительное средство и хотите внедрить его в более чем одном Web-приложении.

Например, представьте, что вы хотите создать собственный построитель выражений, который позволит вам вставлять случайные числа. Вы хотите иметь возможность писать дескрипторы, вроде приведенного ниже, чтобы показывать случайное число от 1 до 6:


<asp:Literal Runat="server" Text="<%$ RandomNumber:1,6 %>" />

К сожалению, создание пользовательских построителей выражений не так просто, как вы, возможно, ожидали. Проблема в том, как компилируется код. Когда вы компилируете страницу, содержащую выражение, код вычисления выражения также должен быть скомпилирован с ней. Однако вы не хотите, чтобы выражение вычислялось в этой точке, а вместо этого желаете, чтобы оно повторно вычислялось при каждом запросе страницы. Чтобы обеспечить такую возможность, ваш построитель выражений нуждается в генерации обобщенного сегмента кода, который выполняет соответствующую задачу. Технология, которая позволяет это сделать, называется CodeDOM (Code Document Object Model — Объектная модель документа кода) — модель для динамической генерации конструкций кода. Каждый построитель, выражений включает метод по имени GetCodeExpression(), использующий CodeDOM для генерации кода, необходимого выражению. Другими словами, если вы хотите создать RandomNumberExpressionBuilder, то вам нужно создать метод GetCodeExpression(), который использует CodeDOM для генерации сегмента кода вычисления случайных чисел. Ясно, что это не так просто — и для любого, кроме самого тривиального кода, получится достаточно длинно.

предыдущая    следующая страница   оглавление

376

Hosted by uCoz