QueryExtender Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Позволяет фильтровать данные из источника данных без явного Where предложения в источнике данных.
public ref class QueryExtender : System::Web::UI::Control
[System.Drawing.ToolboxBitmap(typeof(System.Web.UI.WebControls.QueryExtender), "QueryExtender.bmp")]
public class QueryExtender : System.Web.UI.Control
[<System.Drawing.ToolboxBitmap(typeof(System.Web.UI.WebControls.QueryExtender), "QueryExtender.bmp")>]
type QueryExtender = class
inherit Control
Public Class QueryExtender
Inherits Control
- Наследование
- Атрибуты
Примеры
В следующем примере показано, как использовать QueryExtender элемент управления для предоставления функции поиска на веб-странице. Элемент QueryExtender управления использует текст, введенный в TextBoxSearch элемент управления, для поиска содержимого в столбцах ProductName и Supplier.CompanyName таблицы Products в данных, возвращаемых из LinqDataSource элемента управления. Объект SearchExpression используется для выполнения поиска. Свойство DataFields указывает поля данных для поиска. Свойство SearchType указывает тип выполняемого поиска. Элемент ControlParameter задает элемент управления, содержащий текст, используемый для поиска. Этот пример кода является частью более крупного примера, предоставленного в пошаговом руководстве. Фильтрация данных на веб-странице с помощью декларативного синтаксиса.
<asp:LinqDataSource ID="dataSource" runat="server"
TableName="Products">
</asp:LinqDataSource>
<asp:QueryExtender TargetControlID="dataSource" runat="server">
<asp:SearchExpression DataFields="ProductName, Supplier.CompanyName"
SearchType="StartsWith">
<asp:ControlParameter ControlID="TextBoxSearch" />
</asp:SearchExpression>
</asp:QueryExtender>
В следующем примере показано, как использовать QueryExtender элемент управления для поиска веб-страницы значений в указанном диапазоне. Элемент QueryExtender управления использует значения, введенные в TextBoxFrom элементы управления, TextBoxTo для поиска значений в столбцах ProductName и Supplier.CompanyName таблицы Products в данных, возвращаемых из LinqDataSource элемента управления. Элемент ControlParameter задает элементы управления текстовым полем, содержащие минимальные и максимальные значения, используемые для поиска в диапазоне.
MaxType Свойства MinType указывают, что минимальные и максимальные значения должны быть включены в возвращаемые данные. Этот пример кода является частью более крупного примера, предоставленного в пошаговом руководстве. Фильтрация данных на веб-странице с помощью декларативного синтаксиса.
<asp:LinqDataSource ID="dataSource" runat="server"
TableName="Products">
</asp:LinqDataSource>
<asp:QueryExtender TargetControlID="dataSource" runat="server">
<asp:RangeExpression DataField="UnitPrice" MinType="Inclusive"
MaxType="Inclusive">
<asp:ControlParameter ControlID="TextBoxFrom" />
<asp:ControlParameter ControlID="TexBoxTo" />
</asp:RangeExpression>
</asp:QueryExtender>
Комментарии
В этом разделе:
Введение
Элемент QueryExtender управления используется для создания фильтров для данных, полученных из источника данных, без использования явного Where предложения в источнике данных. Элемент QueryExtender управления можно использовать для указания фильтрации с помощью декларативного синтаксиса.
Основные сведения
Фильтрация исключает данные из источника данных, отображая только записи, соответствующие указанным критериям. Фильтрация позволяет представить различные представления данных, которые находится в наборе данных, не затрагивая данные в наборе данных.
Фильтрация обычно требует создания Where предложения для применения к команде, которая запрашивает источник данных.
Where Однако свойство элемента управления версиями данных может не предоставлять все доступные функциональные возможности. Например, элемент управления QueryExtender позволяет запрашивать таблицу, выполняя поиск строк в начале, конце или в любом месте поля данных .data.
Чтобы предоставить полную функциональность, доступную в LINQ, и упростить фильтрацию данных, ASP.NET предоставляет элемент QueryExtender управления. Элемент QueryExtender управления имеет следующие преимущества:
Он предоставляет более широкий интерфейс фильтрации, чем написание
Whereпредложения. Например, можно искать таблицу Products для логических значений с помощью PropertyExpression фильтра без написания запроса.Он позволяет указать фильтры с помощью того же синтаксиса для LinqDataSource элементов управления и элементов управления, EntityDataSource а также для других элементов управления источниками данных, которые можно использовать.
Его можно использовать с LinqDataSource элементом управления, с элементом EntityDataSource управления или сторонними источниками данных.
Параметры фильтра
Элемент QueryExtender управления поддерживает различные параметры, которые можно использовать для фильтрации данных. Элемент управления позволяет выполнять поиск строк, выполнять поиск числовых значений в указанном диапазоне и сравнивать значение свойства в таблице с указанным значением. Элемент управления также позволяет сортировать данные и предоставлять пользовательские запросы.
Эти параметры предоставляются в виде выражений LINQ в элементе QueryExtender управления. Элемент QueryExtender управления также поддерживает выражения, относящиеся к ASP.NET приложениям динамических данных.
В следующей таблице перечислены параметры, которые можно использовать для фильтрации данных в элементе QueryExtender управления.
| Expression | Описание |
|---|---|
| ControlFilterExpression | (только динамические данные) Создает запрос базы данных с помощью ключа данных, выбранного в элементе управления с привязкой к исходным данным. Сведения об использовании этого параметра фильтра см. в разделе "Практическое руководство. Фильтрация строк таблицы с помощью значений из родительской таблицы в динамических данных". |
| CustomExpression | Задает определяемое пользователем выражение для источника данных. Пользовательское выражение LINQ можно вызвать в обработчике событий. |
| DynamicFilterExpression | (только динамические данные) Создает запрос базы данных с помощью указанного DynamicFilter элемента управления. Сведения об использовании этого параметра фильтра см. в разделе "Практическое руководство. Фильтрация строк таблицы с помощью внешнего ключа в динамических данных". |
| MethodExpression | Указывает определяемое пользователем выражение LINQ для источника данных. Выражение вызывается в методе. |
| OrderByExpression | Применяет выражение сортировки к объекту IQueryable источника данных. После применения OrderByExpression значения можно применить дополнительные операции сортировки, указав ThenByExpressions значение. |
| PropertyExpression | Сравнивает свойства полей данных и значений WhereParameters свойств, указанных в коллекции. |
| RangeExpression | Определяет, больше ли значение или меньше указанного значения, или значение между двумя значениями. |
| SearchExpression | Сравнивает значения в поле или полях с указанным строковым значением. |
Эти QueryExtender параметры можно использовать по отдельности или объединить их для обеспечения сложной фильтрации на веб-странице. Дополнительные сведения см. в разделе "Обзор управления веб-сервером QueryExtender". Пошаговое руководство. Фильтрация данных на веб-странице с помощью декларативного синтаксиса
Задачи
В следующей QueryExtender таблице перечислены задачи, демонстрирующие использование элемента управления для фильтрации данных.
| Документ | задачи |
|---|---|
| Пошаговое руководство. Фильтрация данных на веб-странице с помощью декларативного синтаксиса | Показывает, как использовать параметры фильтра, которые предоставляет элемент QueryExtender управления. |
Декларативный синтаксис
<asp:QueryExtender
EnableViewState="True|False"
ID="string"
OnDataBinding="DataBiding event handler"
OnDisposed="Disposed event handler"
OnInit="Init event handler
OnLoad="Load event handler"
OnPreRender="PreRender event handler"
OnUnload="UnLoad event handler"
Runat="server"
TargetControlID="string"
Visible="True|False"
>
<asp:ControlFilterExpression
ControlD="string"
Column="string">
</asp:ControlFilterExpression>
<asp:DynamicFilterExpression
ControlD="string"
</asp:DynamicFilterExpression>
<asp:CustomExpression="string"
OnQuerying="OnQuerying event handler">
</asp:CustomExpression>
<asp:OrderByExpression="string"
DataField="string"
Direction="string">
<asp:ThenByExpression
DataField="string"
Direction="string"
</asp:ThenBy>
</asp:OrderByExpression>
<asp:PropertyExpression="string">
<!-- child controls -->
</asp:PropertyExpression
>
<asp:RangeExpression="integer"
Datafield="string"
MaxType="Exclusive|Inclusive|None"
MinType="Exclusive|Inclusive|None">
<!--child controls-->
</asp:RangeExpression>
<asp:SearchExpression="string"
ComparisonType="CurrentCulture|CurrentCultureIgnoreCase|
InvariantCulture|InvariantCultureIgnoreCase|
Ordinal|OrdinalIgnoreCase"
DataField="string"
SearchType="Contains|EndsWith|StartsWith">
<!--child controls-->
</asp:SearchExpression>
</asp:QueryExtender>
Конструкторы
| Имя | Описание |
|---|---|
| QueryExtender() |
Инициализирует новый экземпляр QueryExtender класса. |
Свойства
| Имя | Описание |
|---|---|
| Adapter |
Возвращает адаптер, зависящий от браузера, для элемента управления. (Унаследовано от Control) |
| AppRelativeTemplateSourceDirectory |
Возвращает или задает относительный к приложению виртуальный каталог Page объекта или UserControl объекта, содержащего этот элемент управления. (Унаследовано от Control) |
| BindingContainer |
Возвращает элемент управления, содержащий привязку данных этого элемента управления. (Унаследовано от Control) |
| ChildControlsCreated |
Возвращает значение, указывающее, были ли созданы дочерние элементы управления сервера. (Унаследовано от Control) |
| ClientID |
Возвращает идентификатор элемента управления для разметки HTML, созданной ASP.NET. (Унаследовано от Control) |
| ClientIDMode |
Возвращает или задает алгоритм, используемый для создания значения ClientID свойства. (Унаследовано от Control) |
| ClientIDSeparator |
Возвращает значение символа, представляющее символ разделителя, используемый в свойстве ClientID . (Унаследовано от Control) |
| Context |
HttpContext Возвращает объект, связанный с серверным элементом управления для текущего веб-запроса. (Унаследовано от Control) |
| Controls |
ControlCollection Возвращает объект, представляющий дочерние элементы управления для указанного серверного элемента управления в иерархии пользовательского интерфейса. (Унаследовано от Control) |
| DataItemContainer |
Возвращает ссылку на контейнер именования, если контейнер именования реализует IDataItemContainer. (Унаследовано от Control) |
| DataKeysContainer |
Возвращает ссылку на контейнер именования, если контейнер именования реализует IDataKeysControl. (Унаследовано от Control) |
| DataSource |
Возвращает элемент управления источниками данных (IDataSource объект), используемый для запроса. |
| DesignMode |
Возвращает значение, указывающее, используется ли элемент управления на поверхности конструктора. (Унаследовано от Control) |
| EnableTheming |
Возвращает или задает значение, указывающее, применяются ли темы к этому элементу управления. (Унаследовано от Control) |
| EnableViewState |
Возвращает или задает значение, указывающее, сохраняет ли серверный элемент управления состояние представления и состояние представления всех дочерних элементов управления, содержащихся в нем, для запрашивающего клиента. (Унаследовано от Control) |
| Events |
Возвращает список делегатов обработчика событий для элемента управления. Это свойство доступно только для чтения. (Унаследовано от Control) |
| Expressions |
Возвращает коллекцию выражений, применяемых к элементу IDataSource управления. |
| HasChildViewState |
Получает значение, указывающее, имеют ли дочерние элементы управления текущего элемента управления серверным элементом управления какие-либо сохраненные параметры состояния представления. (Унаследовано от Control) |
| ID |
Возвращает или задает программный идентификатор, назначенный элементу управления сервером. (Унаследовано от Control) |
| IdSeparator |
Возвращает символ, используемый для разделения идентификаторов элемента управления. (Унаследовано от Control) |
| IsChildControlStateCleared |
Возвращает значение, указывающее, имеют ли элементы управления, содержащиеся в этом элементе управления, состояние элемента управления. (Унаследовано от Control) |
| IsTrackingViewState |
Возвращает значение, указывающее, сохраняется ли серверная система управления изменениями в состоянии представления. (Унаследовано от Control) |
| IsViewStateEnabled |
Возвращает значение, указывающее, включено ли состояние представления для этого элемента управления. (Унаследовано от Control) |
| LoadViewStateByID |
Возвращает значение, указывающее, участвует ли элемент управления в загрузке состояния ID представления вместо индекса. (Унаследовано от Control) |
| NamingContainer |
Возвращает ссылку на контейнер именования серверного элемента управления, который создает уникальное пространство имен для различения между элементами управления сервера с ID одинаковым значением свойства. (Унаследовано от Control) |
| Page |
Возвращает ссылку на Page экземпляр, содержащий серверный элемент управления. (Унаследовано от Control) |
| Parent |
Возвращает ссылку на родительский элемент управления сервера в иерархии элементов управления страницами. (Унаследовано от Control) |
| RenderingCompatibility |
Возвращает значение, указывающее версию ASP.NET, с которым будет совместим отрисованный HTML. (Унаследовано от Control) |
| Site |
Получает сведения о контейнере, на котором размещается текущий элемент управления при отрисовки на поверхности конструктора. (Унаследовано от Control) |
| SkinID |
Возвращает или задает кожу, применяемую к элементу управления. (Унаследовано от Control) |
| TargetControlID |
Возвращает или задает идентификатор IDataSource элемента управления, который будет использоваться для запроса. |
| TemplateControl |
Возвращает или задает ссылку на шаблон, содержащий этот элемент управления. (Унаследовано от Control) |
| TemplateSourceDirectory |
Возвращает виртуальный Page каталог или UserControl содержащий текущий серверный элемент управления. (Унаследовано от Control) |
| UniqueID |
Возвращает уникальный иерархический идентификатор для элемента управления сервером. (Унаследовано от Control) |
| ValidateRequestMode |
Возвращает или задает значение, указывающее, проверяет ли элемент управления входные данные клиента из браузера для потенциально опасных значений. (Унаследовано от Control) |
| ViewState |
Получает словарь сведений о состоянии, позволяющий сохранять и восстанавливать состояние представления серверного элемента управления в нескольких запросах на одну и ту же страницу. (Унаследовано от Control) |
| ViewStateIgnoresCase |
Возвращает значение, указывающее, является ли StateBag объект нечувствительным к регистру. (Унаследовано от Control) |
| ViewStateMode |
Возвращает или задает режим состояния представления этого элемента управления. (Унаследовано от Control) |
| Visible |
Возвращает или задает значение, указывающее, отображается ли серверный элемент управления в виде пользовательского интерфейса на странице. (Унаследовано от Control) |
Методы
| Имя | Описание |
|---|---|
| AddedControl(Control, Int32) |
Вызывается после добавления дочернего Control элемента управления в Controls коллекцию объекта. (Унаследовано от Control) |
| AddParsedSubObject(Object) |
Уведомляет серверный элемент управления о том, что элемент , XML или HTML, был проанализирован, и добавляет элемент в объект элемента управления ControlCollection сервера. (Унаследовано от Control) |
| ApplyStyleSheetSkin(Page) |
Применяет свойства стиля, определенные в таблице стилей страницы, к элементу управления. (Унаследовано от Control) |
| BeginRenderTracing(TextWriter, Object) |
Начинает трассировку данных отрисовки во время разработки. (Унаследовано от Control) |
| BuildProfileTree(String, Boolean) |
Собирает сведения о серверном элементе управления и передает его Trace свойству, которое будет отображаться при включении трассировки для страницы. (Унаследовано от Control) |
| ClearCachedClientID() |
Задает кэшированное ClientID значение |
| ClearChildControlState() |
Удаляет сведения о состоянии элемента управления для дочерних элементов управления сервера. (Унаследовано от Control) |
| ClearChildState() |
Удаляет сведения о состоянии представления и состояния элемента управления для всех дочерних элементов управления сервера. (Унаследовано от Control) |
| ClearChildViewState() |
Удаляет сведения о состоянии представления для всех дочерних элементов управления сервера. (Унаследовано от Control) |
| ClearEffectiveClientIDMode() |
ClientIDMode Задает свойство текущего экземпляра элемента управления и всех дочерних элементов управленияInherit. (Унаследовано от Control) |
| CreateChildControls() |
Вызывается платформой страницы ASP.NET, чтобы уведомить серверные элементы управления, использующие реализацию на основе композиции, чтобы создать все дочерние элементы управления, содержащиеся в подготовке к публикации обратной или отрисовки. (Унаследовано от Control) |
| CreateControlCollection() |
Создает новый ControlCollection объект для хранения дочерних элементов управления (как литерала, так и сервера) элемента управления сервером. (Унаследовано от Control) |
| DataBind() |
Привязывает источник данных к вызываемой серверной системе управления и всем дочерним элементам управления. (Унаследовано от Control) |
| DataBind(Boolean) |
Привязывает источник данных к вызываемой серверной системе управления и всем его дочерним элементам управления с возможностью вызвать DataBinding событие. (Унаследовано от Control) |
| DataBindChildren() |
Привязывает источник данных к дочерним элементам управления сервера. (Унаследовано от Control) |
| Dispose() |
Позволяет элементу управления сервера выполнять окончательную очистку перед освобождением из памяти. (Унаследовано от Control) |
| EndRenderTracing(TextWriter, Object) |
Завершает трассировку времени разработки данных отрисовки. (Унаследовано от Control) |
| EnsureChildControls() |
Определяет, содержит ли серверный элемент управления дочерние элементы управления. Если это не так, он создает дочерние элементы управления. (Унаследовано от Control) |
| EnsureID() |
Создает идентификатор для элементов управления, которым не назначен идентификатор. (Унаследовано от Control) |
| Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
| FindControl(String, Int32) |
Выполняет поиск текущего контейнера именования для элемента управления сервером с указанным |
| FindControl(String) |
Выполняет поиск текущего контейнера именования для элемента управления сервером с указанным |
| Focus() |
Задает фокус ввода элементу управления. (Унаследовано от Control) |
| GetDesignModeState() |
Возвращает данные во время разработки для элемента управления. (Унаследовано от Control) |
| GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
| GetRouteUrl(Object) |
Возвращает URL-адрес, соответствующий набору параметров маршрута. (Унаследовано от Control) |
| GetRouteUrl(RouteValueDictionary) |
Возвращает URL-адрес, соответствующий набору параметров маршрута. (Унаследовано от Control) |
| GetRouteUrl(String, Object) |
Получает URL-адрес, соответствующий набору параметров маршрута и имени маршрута. (Унаследовано от Control) |
| GetRouteUrl(String, RouteValueDictionary) |
Получает URL-адрес, соответствующий набору параметров маршрута и имени маршрута. (Унаследовано от Control) |
| GetType() |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
| GetUniqueIDRelativeTo(Control) |
Возвращает префиксированную часть UniqueID свойства указанного элемента управления. (Унаследовано от Control) |
| HasControls() |
Определяет, содержит ли серверный элемент управления какие-либо дочерние элементы управления. (Унаследовано от Control) |
| HasEvents() |
Возвращает значение, указывающее, регистрируются ли события для элемента управления или любых дочерних элементов управления. (Унаследовано от Control) |
| IsLiteralContent() |
Определяет, содержит ли серверный элемент управления только литеральное содержимое. (Унаследовано от Control) |
| LoadControlState(Object) |
Восстанавливает сведения о состоянии элемента управления из предыдущего запроса страницы, сохраненного методом SaveControlState() . (Унаследовано от Control) |
| LoadViewState(Object) |
Загружает состояние значений в элементе QueryExtender управления, которое необходимо сохранить. |
| MapPathSecure(String) |
Извлекает физический путь, с которым сопоставляется виртуальный путь( абсолютный или относительный). (Унаследовано от Control) |
| MemberwiseClone() |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
| OnBubbleEvent(Object, EventArgs) |
Определяет, передается ли событие для элемента управления сервером пользовательского интерфейса страницы. (Унаследовано от Control) |
| OnDataBinding(EventArgs) |
Вызывает событие DataBinding. (Унаследовано от Control) |
| OnInit(EventArgs) |
Происходит при инициализации нового экземпляра QueryExtender класса. |
| OnLoad(EventArgs) |
Вызывает событие Load. (Унаследовано от Control) |
| OnPreRender(EventArgs) |
Вызывает событие PreRender. (Унаследовано от Control) |
| OnUnload(EventArgs) |
Вызывает событие Unload. (Унаследовано от Control) |
| OpenFile(String) |
Возвращает используемый Stream для чтения файла. (Унаследовано от Control) |
| RaiseBubbleEvent(Object, EventArgs) |
Назначает любые источники события и ее сведения родительскому элементу управления. (Унаследовано от Control) |
| RemovedControl(Control) |
Вызывается после удаления дочернего Control элемента управления из Controls коллекции объекта. (Унаследовано от Control) |
| Render(HtmlTextWriter) |
Отправляет содержимое элемента управления сервера в предоставленный HtmlTextWriter объект, который записывает содержимое для отрисовки на клиенте. (Унаследовано от Control) |
| RenderChildren(HtmlTextWriter) |
Выводит содержимое дочерних элементов управления сервера в предоставленный HtmlTextWriter объект, который записывает содержимое для отрисовки на клиенте. (Унаследовано от Control) |
| RenderControl(HtmlTextWriter, ControlAdapter) |
Выводит содержимое элемента управления сервером в предоставленный HtmlTextWriter объект с помощью предоставленного ControlAdapter объекта. (Унаследовано от Control) |
| RenderControl(HtmlTextWriter) |
Выводит содержимое сервера управления в предоставленный HtmlTextWriter объект и сохраняет сведения о трассировке элемента управления, если трассировка включена. (Унаследовано от Control) |
| ResolveAdapter() |
Возвращает адаптер управления, отвечающий за отрисовку указанного элемента управления. (Унаследовано от Control) |
| ResolveClientUrl(String) |
Получает URL-адрес, который может использоваться браузером. (Унаследовано от Control) |
| ResolveUrl(String) |
Преобразует URL-адрес в url-адрес, который можно использовать на запрашиваемом клиенте. (Унаследовано от Control) |
| SaveControlState() |
Сохраняет все изменения состояния управления сервером, которые произошли с момента публикации страницы на сервер. (Унаследовано от Control) |
| SaveViewState() |
Сохраняет текущее состояние QueryExtender представления элемента управления. |
| SetDesignModeState(IDictionary) |
Задает данные во время разработки для элемента управления. (Унаследовано от Control) |
| SetRenderMethodDelegate(RenderMethod) |
Назначает делегат обработчика событий для отрисовки элемента управления сервером и его содержимого в родительский элемент управления. (Унаследовано от Control) |
| SetTraceData(Object, Object, Object) |
Задает данные трассировки для трассировки данных отрисовки во время разработки, используя объект трассировки, ключ данных трассировки и значение данных трассировки. (Унаследовано от Control) |
| SetTraceData(Object, Object) |
Задает данные трассировки для трассировки данных отрисовки во время разработки, используя ключ данных трассировки и значение данных трассировки. (Унаследовано от Control) |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| TrackViewState() |
Отслеживает изменения QueryExtender состояния представления элемента управления, чтобы изменения могли храниться в объекте StateBag для элемента управления. |
События
| Имя | Описание |
|---|---|
| DataBinding |
Происходит, когда серверный элемент управления привязывается к источнику данных. (Унаследовано от Control) |
| Disposed |
Происходит при освобождении серверного элемента управления из памяти, который является последним этапом жизненного цикла управления сервера при запросе страницы ASP.NET. (Унаследовано от Control) |
| Init |
Происходит при инициализации серверного элемента управления, который является первым шагом в его жизненном цикле. (Унаследовано от Control) |
| Load |
Происходит при загрузке серверного элемента управления в Page объект. (Унаследовано от Control) |
| PreRender |
Происходит после Control загрузки объекта, но до отрисовки. (Унаследовано от Control) |
| Unload |
Происходит при выгрузке серверного элемента управления из памяти. (Унаследовано от Control) |
Явные реализации интерфейса
Методы расширения
| Имя | Описание |
|---|---|
| FindDataSourceControl(Control) |
Возвращает источник данных, связанный с элементом управления данными для указанного элемента управления. |
| FindFieldTemplate(Control, String) |
Возвращает шаблон поля для указанного столбца в контейнере именования указанного элемента управления. |
| FindMetaTable(Control) |
Возвращает объект метатабли для содержащего элемента управления данными. |