Формирование шаблонов динамических данных ASP.NET

Динамические данные ASP.NET позволяют создавать расширенные веб-приложения, управляемые данными, с помощью предварительно определенных элементов для просмотра и редактирования данных. Наряду с моделью данных эти элементы предоставляют гибкую среду для построения и настройки веб-приложений ASP.NET.

В этом разделе содержатся следующие подразделы.

  • Формирование шаблонов

  • Шаблоны страниц

  • Шаблоны полей

  • Шаблоны сущностей

  • Шаблоны фильтров

Формирование шаблонов

Формирование шаблонов — это автоматическое создание веб-страниц для каждой таблицы в базе данных с помощью элементов платформы динамических данных. На этих автоматически сформированных веб-страницах реализованы операции создания, считывания, обновления и удаления (CRUD) для каждой таблицы. Формирование шаблонов включает в себя шаблоны страниц, шаблоны страниц сущностей и полей, а также шаблоны фильтров. Эти шаблоны позволяют быстро создать функциональный веб-сайт, управляемый данными.

В формировании шаблонов участвует модель данных, которая представляет сущности базы данных в виде типов среды CLR. Динамические данные используют метаданные из модели данных для создания пользовательского интерфейса для веб-приложения, а также для управления изменениями, выполненными пользователем.

Функция формирования шаблонов имеет следующие преимущества:

  • Для создания веб-приложения, управляемого данными, необходимо небольшое количество кода (в некоторых случаях возможно создание без применения кода).

  • Функциональные страницы создаются автоматически и обеспечивают для базы данных функции CRUD, сортировку и разбиение на страницы.

  • Функция маршрутизации ASP.NET (маршрутизация URL-адресов) автоматически обрабатывает запросы. Функция динамических данных получает используемый шаблон и таблицу из URL-адреса запроса.

  • Встроенная проверка данных на основе схемы базы данных.

  • Фильтры данных автоматически создаются для внешних ключей, логических полей и типов полей перечисления.

  • Внешний вид и поведение полей данных легко настраиваются.

Веб-сайт на платформе динамических данных ASP.NET можно создать в Visual Studio 2010 с использованием шаблона Веб-узел Dynamic Data. Дополнительные сведения см. в разделе Пошаговое руководство. Создание нового веб-узла, использующего формирование шаблонов. Дополнительные сведения о структуре проекта веб-сайта, использующего формирование шаблонов, см. в разделе Инфраструктура платформы динамических данных ASP.NET.

Включение механизма формирования шаблонов

По умолчанию механизм формирования шаблонов отключен. Включение этого механизма необходимо выполнять с осторожностью, так как это повышает вероятность несанкционированного доступа к базе данных.

Возможны следующие подходы к включению механизма формирования шаблонов.

  • Включение механизма формирования шаблонов после регистрации контекста данных. Контекст данных необходимо зарегистрировать для модели данных, чтобы использовать функции динамических данных. Это действие выполняется в файле Global.asax.

  • Включение или отключение механизма формирования шаблонов в отдельной таблице. Для этого используется атрибут ScaffoldTableAttribute. Этот подход позволяет предоставить только таблицы, необходимые для приложения, а не всю базу данных. .

  • Включение механизма формирования шаблонов для отдельного поля данных. Для этого используется атрибут ScaffoldColumnAttribute.

Функция динамических данных по умолчанию применяет следующие правила в соответствующем порядке для определения необходимости отображения поля данных.

  • Если к полю данных применен атрибут ScaffoldColumnAttribute, то оно отображается. Это правило переопределяет все перечисленные ниже правила.

  • Если к полю данных применен атрибут UIHintAttribute, то оно отображается. Это правило переопределяет все перечисленные ниже правила.

  • Если поле данных является полем внешнего ключа, то поле данных не отображается, так как функция динамических данных не отображает значения полей внешнего ключа.

  • Если поле данных генерируется в базе данных автоматически, оно не отображается. Обычно подобные поля не содержат важной для пользователя информации. Если поле данных необходимо отобразить, разработчик может применить атрибут UIHintAttribute к полю данных в модели данных.

  • Если значением свойства IsCustomProperty является true, то поле данных не отображается.

Шаблоны страниц

Функция динамических данных использует шаблоны страниц для отображения страниц и предоставления возможностей CRUD. Шаблоны являются страницами ASP.NET (расширение ASPX). При создании проекта на платформе динамических данных Visual Studio добавляет в проект папку DynamicData\PageTemplates. В этой папке содержатся шаблоны страниц по умолчанию. Разработчик может изменить шаблоны страниц по умолчанию или создать новые шаблоны для задания способа отображения таблиц.

Шаблоны страниц по умолчанию

Шаблоны страниц по умолчанию имеют следующие функции.

  • Они используют главную страницу Site.master, которая расположена в корневой папке веб-приложения. Главная страница определяет таблицы стилей и простой заголовок. Кроме того, она содержит элемент управления ScriptManager, который позволяет включить функцию Ajax. Для отладки может понадобиться отключить частичное обновление страниц путем установки для свойства EnablePartialRendering элемента управления ScriptManager значения false.

  • Все шаблоны страниц содержат элемент управления UpdatePanel для поддержки частичного отображения без обратной передачи. Дополнительные сведения см. в разделе Общие сведения об элементе управления UpdatePanel.

  • Все шаблоны страниц содержат элемент управления DynamicDataManager. Этот элемент управления обеспечивает динамическое поведение для элементов управления источником данных, а также для элементов управления шаблона, связанных с данными.

В следующей таблице перечислены шаблоны страниц платформы динамических данных по умолчанию.

Шаблон страницы

Описание

Details.aspx

Представление "Сведения" одной строки в базе данных. Этот шаблон используется по умолчанию для операции выбора. Для отображения данных используется элемент управления DetailsView.

Edit.aspx

Предоставляет страницу, которая позволяет пользователям редактировать одну строку таблицы базы данных. Этот шаблон используется по умолчанию для операции редактирования. Он использует элемент управления DetailsView.

Insert.aspx

Предоставляет страницу, которая позволяет пользователям вставлять одну строку в таблицу базы данных. Этот шаблон используется по умолчанию для операции вставки. Он использует элемент управления DetailsView.

List.aspx

Выводит список строк из таблицы базы данных. Этот шаблон используется по умолчанию для отображения таблицы. Этот шаблон предоставляет элементы управления DropDownList, которые позволяют пользователям фильтровать и сортировать данные, а также разбивать их на страницы. Он использует элемент управления GridView.

ListDetails.aspx

Выводит список строк из таблицы базы данных. Шаблон позволяет пользователям фильтровать и сортировать данные, а также разбивать их на страницы. Для списка строк используется элемент управления GridView, а для выбранной строки и вставки новой записи — элемент управления DetailsView.

Этот шаблон обеспечивает функциональность "все в одном". Платформа динамических данных не использует его по умолчанию. Разработчик может изменить конфигурацию в файле Global.asax для использования этого шаблона вместо отдельных шаблонов для различных операций (например, List.aspx и Edit.aspx).

Шаблоны полей

Шаблоны полей являются пользовательскими элементами управления ASP.NET. Они сопоставляют типы данных в модели данных с полями в элементе управления ASP.NET с привязкой к данным. Платформа динамических данных использует шаблоны полей для автоматического создания пользовательского интерфейса для сущностей данных в зависимости от схемы базы данных и типов данных.

Шаблоны полей по умолчанию

Платформа динамических данных ASP.NET получает тип данных поля во время выполнения. Затем она использует соответствующий шаблон поля для отображения данных в элементе управления ASP.NET с привязкой к данным. Используемый шаблон поля зависит от типа данных, а также от режима элемента управления данными (отображение, редактирование или вставка).

При создании проекта на платформе динамических данных Visual Studio добавляет в проект папку DynamicData\FieldTemplates. Эта папка содержит шаблоны полей по умолчанию. Разработчик может изменить шаблоны полей по умолчанию или создать новые шаблоны для задания способа отображения отдельных полей данных.

В следующей таблице описываются шаблоны полей по умолчанию в проектах на платформе динамических данных ASP.NET.

Шаблон поля по умолчанию

Описание

Boolean.ascx

Отображает логические данные в виде элемента управления CheckBox. Элемент управления CheckBox отключается и не может быть изменен.

Boolean_Edit.ascx

Позволяет пользователям редактировать логические значения с помощью элемента управления CheckBox.

Children.ascx

Отображает поля, имеющие связь "один ко многим", и перенаправляет пользователя на дочернюю страницу. Обеспечивает отображение элемента управления HyperLink.

Children_Insert.ascx

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

DateTime.ascx

Отображает тип данных DateTime в виде текста с помощью элемента управления Literal.

DateTime_Edit.ascx

Позволяет пользователям редактировать данные DateTime с помощью элемента управления TextBox. Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то этот элемент управления также обеспечивает визуализацию элемента управления RequiredFieldValidator. Шаблон поля DateTime_Edit.ascx предоставляет элемент управления System.Web.DynamicData.DynamicValidator, который обрабатывает все исключения, возникающие в модели данных. Этот шаблон поля поддерживает класс Regex.

Decimal_Edit.ascx

Позволяет пользователям редактировать десятичные числовые данные с помощью элемента управления TextBox. Кроме того, обеспечивает визуализацию элемента управления CompareValidator, который проверяет возможность преобразования вводимых данных в тип данных Decimal. Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то этот элемент управления также обеспечивает визуализацию элемента управления RequiredFieldValidator. Если поле содержит атрибут Range, то оно также обеспечивает визуализацию элемента управления RangeValidator. Шаблон поля Decimal_Edit.ascx предоставляет элемент управления System.Web.DynamicData.DynamicValidator, который обрабатывает все исключения, порождаемые в модели данных. Этот шаблон поля использует класс Regex.

Enumeration.ascx

Отображает значения перечисления с помощью элемента управления Literal. Тип столбца перечисления является простейшим типом поля данных в соответствии с определением в базе данных или типом, определенным путем применения EnumDataTypeAttribute в модели данных.

Enumeration_Edit.ascx

Позволяет пользователям выбирать значения перечисления из списка с помощью элемента управления DropDownList.

ForeignKey.ascx

Отображает поля, имеющие связь "многие к одному". Обеспечивает визуализацию элемента управления HyperLink, которое перенаправляет пользователя на страницу связи.

ForeignKey_Edit.ascx

Позволяет пользователям изменять поля данных со связью "многие к одному" с помощью элемента управления DropDownList.

Integer_Edit.ascx

Позволяет пользователям редактировать целочисленные данные с помощью элемента управления TextBox. Шаблон также обеспечивает визуализацию элемента CompareValidator, который проверяет возможность преобразования данных, вводимых в текстовое поле, в целочисленный тип данных. Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то этот элемент управления также обеспечивает визуализацию элемента управления RequiredFieldValidator. Если поле в модели содержит атрибут Range, то поле также обеспечивает визуализацию элемента управления RangeValidator. Integer_Edit.ascx предоставляет элемент управления System.Web.DynamicData.DynamicValidator, который обрабатывает все исключения, возникающие в модели данных. Этот шаблон поля использует класс Regex.

Multiline_Edit.ascx

Позволяет пользователям редактировать поля баз данных для определенных типов строк. Например, если модель данных сопоставлена с базой данных SQL Server, то шаблон Multiline_Edit.ascx выполняет сопоставление с типами данных text, ntext, varchar(max), nvarchar(max). Этот шаблон отображает элемент управления TextBox, свойство TextMode которого имеет значение MultiLine. Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то Multiline_Edit.ascx также обеспечивает визуализацию элемента управления RequiredFieldValidator. Если в модель данных добавлен атрибут RegularExpression, поле данных также обеспечивает визуализацию элемента управления RegularExpressionValidator. Multiline_Edit.ascx предоставляет элемент управления DynamicValidatorSystem.Web.DynamicData.DynamicValidator, который обрабатывает все исключения, возникающие в модели данных.

ManyToMany.ascx

Используется для отображения и редактирования полей данных со связью "многие ко многим", если модель данных приложения использует инфраструктуру ADO Entity Framework. Этот шаблон поля не используется, если модель данных основана на языке LINQ to SQL, так как он не поддерживает связь "многие ко многим".

ManyToMany_Edit.ascx

Позволяет пользователям редактировать поля со связью "многие ко многим" с другой таблицей. Этот шаблон требует таблицы присоединения.

Text.ascx

Отображает строковые данные и все числовые типы данных с помощью элемента управления Literal.

Text_Edit.ascx

Позволяет пользователям редактировать строковые данные, которые не являются многострочным текстом, с помощью элемента управления TextBox, свойство TextMode которого равно SingleLine. Если поле в базе данных не может принимать значение null или атрибут Required добавлен к модели данных, то Text_Edit.ascx также обеспечивает визуализацию элемента управления RequiredFieldValidator. Если поле в базе данных имеет максимальную длину, то применяется свойство MaxLength элемента управления TextBox. Если в модели данных есть атрибут RegularExpression, шаблон поля по умолчанию также обеспечивает визуализацию элемента управления RegularExpressionValidator. Text_Edit.ascxпредоставляет элемент управления System.Web.DynamicData.DynamicValidator, который обрабатывает все исключения, порождаемые в модели данных.

Url.ascx

Отображает URL-адреса с помощью элемента управления HyperLink. Тип поля данных отмечается как гиперссылка путем пометки поля в модели данных с помощью атрибута DataTypeAttribute, который указывает на то, что поле является URL-адресом.

Сопоставление типов данных с шаблонами полей

Разработчик может изменить шаблон поля, используемый для отображения поля данных, следующими способами:

Если при одновременном использовании разметки и модели данных сопоставления не совпадают, то разметка имеет приоритет.

Отображение шаблонов полей

Платформа динамических данных обеспечивает визуализацию шаблонов полей по умолчанию и пользовательских шаблонов полей в режимах отображения, редактирования и вставки. Платформа динамических данных использует правила поиска для определения отображаемого шаблона поля. Выбор используемого шаблона зависит от режима элемента управления (отображение, редактирование или вставка). Например, если данные в столбце представляют собой логическое значение и элемент управления данными находится в режиме отображения, платформа динамических данных осуществляет визуализацию Boolean.ascx — шаблона поля по умолчанию, отображающего логические типы данных. Однако если элемент управления данными находится в режиме редактирования, то по умолчанию платформа динамических данных осуществляет визуализацию Boolean_Edit.ascx — шаблона поля, позволяющего редактировать логические типы данных.

Платформа динамических данных начинает поиск с определения режима шаблонов полей.

Поиск шаблона поля в режиме отображения

Ниже приведен список правил поиска, используемых платформой динамических данных для визуализации шаблонов полей в режиме отображения.

  • Если поле данных в модели данных отмечено атрибутом UIHintAttribute, который указывает шаблон настраиваемого поля, то платформа динамических данных выполняет поиск элемента управления, который основан имени настраиваемого элемента управления и на атрибуте DataTypeAttribute, определенном в свойствах UIHint и DataTypeAttribute. Платформа динамических данных по умолчанию не отображает все типы данных. Например, не отображаются типы данных в виде массива битов (двоичный тип, отметка времени и графический тип). Дополнительные сведения об отображении пользовательских типов данных см. в описании класса DataTypeAttribute.

  • Если поле не отмечено атрибутом UIHintAttribute, то платформа динамических данных определяет тип данных из столбца в базе данных и выполняет поиск шаблона поля на основании типа данных. Имя типа определяется следующим образом.

    1. Платформа динамических данных выполняет поиск шаблона поля, который совпадает с полным именем типа данных, например System.Int32.

    2. Если шаблон поля, совпадающий с полным именем типа, не найден, то платформа динамических данных выполняет поиск шаблона поля с простым именем типа данных, например Int32.

    3. Если шаблон поля, совпадающий с полным именем типа, не найден, то платформа динамических данных выполняет поиск особых значений, определенных в таблице данных, как показано далее. Например, если простой тип данных, такой как Int32, не найден, платформа динамических данных осуществляет поиск типа Integer — особого случая, определенного в таблице данных. Если не найден простой тип данных String, то выполняется поиск типа Text — особого случая, определенного для типа String.

    4. Если не найден особый случай, но при этом существует резервный тип данных, то выполняется поиск резервного типа данных. В следующей таблице перечислены резервные типы данных.

      Тип данных

      Резервный тип данных

      Float, Double

      Decimal

      Int16, Byte, Long

      Integer

      Char, Integer, Decimal, GUID, DateTime, DateTimeOffset, TimeSpan

      String

    5. Если резервный тип данных не существует, то платформа динамических данных отображает сообщение об ошибке, а данные не отображаются.

  • Если поле является внешним ключом, то платформа динамических данных использует шаблон ForeignKey.ascxдля связи "многие к одному". Для связи "один к многим" используется шаблон Children.ascx.

Поиск шаблона поля в режиме редактирования

Правила поиска в режиме редактирования идентичны правилам для режима отображения с одним исключением. Если шаблон поля находится в режиме редактирования, то платформа динамических данных использует все правила режима отображения, добавляя "_Edit" к имени необходимого шаблона поля (например, Text_Edit). Если шаблон поля со строкой "_Edit" в имени не найден, то платформа динамических данных осуществляет поиск шаблона поля без этой строки, то есть используется режим отображения (только чтение).

Поиск в режиме вставки

Правила поиска в режиме вставки идентичны правилам для режима отображения с одним исключением. Если шаблон поля находится в режиме вставки, то платформа динамических данных использует все правила режима отображения, добавляя "_Insert" к имени необходимого шаблона поля (например, Text_Insert). Если шаблон со строкой "_Insert" в имени не найден, то платформа динамических данных выполняет поиск шаблона поля в режиме редактирования.

Примечание

Элементы управления "_Insert.ascx" не предоставляются по умолчанию.Таким образом, платформа динамических данных по умолчанию использует шаблоны поля режима редактирования в режиме вставки.

Элементы управления с привязкой к данным, использующие шаблоны полей

Элементы управления FormView, ListView, а также другие элементы управления с поддержкой шаблонов (например, GridView и DetailsView) используют элемент управления DynamicControl для отображения и редактирования данных в модели данных.

Элемент управления DynamicControl также позволяет использовать шаблоны в столбцах данных.

Дополнительные сведения см. в разделе Практическое руководство. Добавление динамического поведения в элементы управления ListView и FormView.

Шаблоны сущностей

Шаблоны сущностей представляют собой пользовательские элементы управления, которые позволяют настраивать макет для всей строки данных в таблице. Они предоставляют больше возможностей управления табличным макетом по сравнению с шаблонами страниц. При создании проекта на платформе динамических данных Visual Studio добавляет в проект папку DynamicData\EntityTemplates. Эта папка содержит шаблоны сущностей по умолчанию, которые отображают данные в двух столбцах с помощью меток для имени поля и соответствующего элемента управления для значения поля.

Это шаблоны сущностей для операций отображения, редактирования и вставки. Шаблоны сущностей включены в шаблоны страниц Details.aspx, Insert.aspx и Update.aspx, а разработчик может использовать их в настраиваемых шаблонах страниц. Шаблоны сущностей используют шаблоны полей для отображения фактических данных. Шаблоны сущностей отображаются на странице при помощи элемента управления DynamicEntity. Во время выполнения платформа динамических данных заменяет этот элемент управления на соответствующий шаблон сущности.

Шаблоны фильтров

Шаблоны фильтров представляют собой пользовательские элементы управления, которые отображают пользовательский интерфейс для фильтрации данных. Фильтрация данных позволяет пользователю выбирать отображаемые строки таблицы в зависимости от значений в выбранном столбце. Например, с помощью шаблон фильтра пользователь может выбрать внешний ключ и отобразить строки, соответствующие этому ключу.

При создании проекта на платформе динамических данных Visual Studio добавляет в проект папку DynamicData\FilterTemplates. Эта папка содержит шаблоны фильтров по умолчанию.

Платформа динамических данных позволяет использовать разметку страницы для создания пользовательского интерфейса фильтрации данных. Такой способ полезен для фильтрации строк таблицы для типа столбца, для которого платформа динамических данных предоставляет шаблон фильтра по умолчанию. Если шаблон фильтра для этого типа столбца не существует, то пользователь может создать новый тип и настроить платформу динамических данных для использования этого типа при создании пользовательского интерфейса. Также можно создать разметку страницы, чтобы платформа динамических данных автоматически создавала пользовательский интерфейс для любого типа столбца, для которого существует шаблон фильтра. Платформа динамических данных по умолчанию создает пользовательский интерфейс только для следующих типов столбцов: логический, тип внешнего ключа и перечисления.

Платформа динамических данных выполняет фильтрацию данных следующим образом:

  1. Шаблон фильтр изменяет основной запрос для элемента управления источником данных на странице. Это позволяет включить общее значение, выбранное пользователем.

  2. Элемент управления источником данных выполняет измененный запрос и возвращает отфильтрованные данные для отображения в связанный элемент управления с привязкой к данным.

Разработчик может изменить шаблоны фильтров по умолчанию или создать новые шаблоны для задания способа фильтрации данных.

В следующей таблице описываются шаблоны фильтров по умолчанию в проектах на платформе динамических данных ASP.NET.

Шаблон фильтров по умолчанию

Описание

Boolean.ascx

Отображает логические данные с помощью элемента управления DropDownList. Отображаются значения All, True и False. Если столбец может содержать значения null, то фильтр также предоставляет значение [Not set].

Enumeration.ascx

Отображает значения перечисления с помощью элемента управления DropDownList. Отображаются значения All и строковые представления значений перечисления. Если столбец может содержать значения null, то фильтр также предоставляет значение [Not set].

ForeignKey.ascx

Отображает внешние ключи с помощью элемента управления DropDownList. Отображаются значения All и значения из связанной таблицы. Если столбец может содержать значения null, то фильтр также предоставляет значение [Not set].

К началу

См. также

Задачи

Пошаговое руководство. Создание нового веб-узла, использующего формирование шаблонов

Пошаговое руководство. Сопоставление наследования "одна таблица на иерархию" в платформе динамических данных

Основные понятия

Маршрутизация ASP.NET

Инфраструктура платформы динамических данных ASP.NET

Настройка уровня динамических данных ASP.NET

Настройка динамических данных ASP.NET

Работа со связями данных "многие ко многим" в платформе динамических данных

Другие ресурсы

Общие сведения о платформе динамических данных ASP.NET

LINQ-to-SQL

Платформа ADO.NET Entity Framework