Создание приложения динамических данных

164

Динамические данные (Dynamic Data) ASP.NET позволяют быстро и с небольшими усилиями создавать веб-приложения, ориентированные на данные. Шаблонные страницы заполняются за счет выведения информации о типах из схемы модели данных, и при этом требуется либо небольшой объем кодирования, либо вообще никакого. Количество функциональных возможностей, которые можно получить за каких-нибудь 15 минут работы, может оказаться довольно внушительным, а как только основные средства созданы, становятся доступными для настройки множество опций.

Знакомство с динамическими данными ASP.NET лучше всего начать с создания примера веб-сайта. Только так можно убедиться, насколько легко получить готовый к использованию сайт, и сколько при этом открывается возможностей. В примерах будет применяться образец базы данных Microsoft Northwind.

Центральной частью веб-сайта динамических данных ASP.NET является модель базы данных. Эту модель можно сгенерировать с использованием LINQ to SQL или платформы Entity Framework. Мы будем использовать LINQ to SQL. Основной подход к обработке динамических данных остается неизменным, независимо от того, какая технология применяется для проектов.

Создание сайта динамических данных

Прежде всего, понадобится создать новый проект динамических данных ASP.NET. В Visual Studio выберите пункт меню File --> New --> Website. Укажите шаблон ASP.NET Dynamic Data Linq to SQL Web Site (Веб-сайт Linq to SQL динамических данных ASP.NET), как показано на рисунке ниже. Щелкните на кнопке OK, чтобы создать проект.

Выбор шаблона ASP.NET Dynamic Data Linq to SQL Web Site

Чтобы создать модель данных, которую будет использовать система динамических данных, щелкните правой кнопкой мыши на значке веб-сайта в окне Solution Explorer, в контекстном меню выберите пункт Add New Item (Добавить новый элемент) и в списке шаблонов укажите шаблон LINQ to SQL Classes (Классы LINQ to SQL). Поскольку в этом примере применяется база данных Northwind, назовите новый элемент Northwind.dbml. Откроется диалоговое окно предупреждения, предлагающее поместить классы LINQ to SQL в папку App_Code, которое показано на рисунке ниже:

Помещение классов модели данных в папку App_Code

Щелкните на кнопке Yes (Да). В проекте будет создан файл Northwind.dbml, и откроется окно визуального конструктора отношений между объектами. Теперь модель данных нужно заполнить требуемыми таблицами базы данных. Разверните элемент Northwind Tables (Таблицы Northwind) в панели Server Explorer и перетащите таблицы Customers, Orders, Order_Details и Products в окно визуального конструктора. Окно Visual Studio должно приобрести вид, показанный на рисунке ниже, отображая таблицы, которые были импортированы в модель данных, и отношения внешнего ключа между ними.

Визуальное представление модели данных

Последний шаг заключается в регистрации только что созданной модели данных в системе динамических данных ASP.NET. Откройте файл Global.asax и удалите символы комментария в строке метода RegisterRoutes, которая вызывает метод DefaultModel.RegisterContext():

public static void RegisterRoutes(RouteCollection routes) {
        // ВАЖНО: РЕГИСТРАЦИЯ МОДЕЛИ ДАННЫХ
        // Удалите символы комментария из этой строки, чтобы зарегистрировать 
        // модель LINQ to SQL для динамических данных ASP.NET. 
        // Установите ScaffoldAllTables = true, только если уверены,
        // что все таблицы в модели данных должны поддерживать формирование шаблонов. 
        // Чтобы управлять поддержкой отдельных таблиц, создайте частичный класс 
        // для таблицы и примените атрибут [ScaffoldTable(true)] к частичному классу. 
        // Примечание. Не забудьте изменить YourDataContextType на имя класса 
        // контекста данных своего приложения.
        DefaultModel.RegisterContext(typeof(NorthwindDataContext),
            new ContextConfiguration() { ScaffoldAllTables = true });
}

Изменение типа ведет к регистрации модели данных. Изменение значения свойства ScaffoldAllTable указывает системе динамических данных ASP.NET, что все четыре таблицы, которые были включены в модель данных, должны отображаться в веб-приложении. Вот и все - сайт динамических данных ASP.NET создан. Результат анализируется в следующем разделе.

Анализ сайта динамических данных

Чтобы увидеть, как выглядит созданный сайт, в Visual Studio можно выбрать пункт меню Debug --> Start Without Debugging (Отладка --> Запустить без отладки). Откроется новое окно браузера и в него будет загружен URL-адрес используемого веб-сервера разработки. Если вы следовали инструкциям, приведенным в предыдущем разделе, окно браузера должно выглядеть подобно показанному на рисунке ниже:

Домашняя страница сайта динамических данных ASP.NET

То, что мы видим, представляет собой формирование шаблонов - система динамических данных ASP.NET извлекла четыре таблицы из модели данных и построила структуру вокруг них. Страница по умолчанию сайта, которой является Default.aspx, содержит ссылку для каждой из таблиц.

Щелкните на ссылке Customers. Откроется страница, которая содержит первые десять записей из таблицы Customers базы данных Northwind, как показано на рисунке ниже:

Страница для таблицы Customers

Система динамических данных ASP.NET создала таблицу из модели данных. Как видите, столбцы таблицы на веб-странице соответствуют столбцам таблицы Customers в базе данных.

Автоматически созданный шаблон поддерживает ряд интересных возможностей. В нижней части экрана можно изменять количество записей, отображаемых на странице. Можно также перемещаться между страницами или переходить к конкретной странице. В левой части каждой строки расположены три ссылки - Edit (Правка), Delete (Удаление) и Details (Сведения). Щелчок на ссылке Edit приводит к открытию новой страницы, на которой можно редактировать запись (и сохранить изменения, щелкнув на ссылке Update (Обновить)). Ссылка Details отображает аналогичную страницу, но без возможности изменения данных. Ссылка Delete, как легко догадаться, позволяет удалять записи из базы данных. Щелчок на заголовке одного из столбцов приводит к сортировке данных с использованием этого столбца в качестве ключа.

Взгляните на правую часть окна браузера. Система динамических данных ASP.NET обнаружила, что таблицы Customers и Orders связаны отношением внешнего ключа, и автоматически добавила ссылку View Orders (Просмотр Orders) для каждой записи. Щелчок на одной из этих ссылок ведет к отображению страницы, которая содержит все заказы выбранного заказчика:

Отфильтрованная страница заказов для заказчика

Обратите внимание на правую часть страницы. Система динамических данных ASP.NET воспользовалась моделью данных и выяснила, что таблица Orders имеет два отношения внешнего ключа: одно с таблицей Customers, которое применялось для перехода к этой странице, а второе - с таблицей Order_Details, которое позволяет просмотреть подробные сведения о том, что было заказано заказчиком. Щелчок на ссылке View Order Details (Просмотр Order Details) вызывает переход на другую страницу, где каждая запись имеет ссылки на записи в таблицах Orders и Products. Идея должна быть понятна.

Щелкните на ссылке Back to home page (Вернуться к домашней странице), чтобы вернуться к списку таблиц, и щелкните на ссылке Orders. Обратите внимание, что эта страница содержит раскрывающийся список Customer (Заказчик), как показано на рисунке ниже. Раскрывающийся список содержит имена всех заказчиков, и выбор заказчика приводит к фильтрации данных на странице для отображения заказов только для этого заказчика.

Фильтр по заказчикам на странице Orders

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

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

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

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

Система динамических данных ASP.NET не является инструментом генерации кода, как это могло показаться. В действительности она представляет собой очень гибкую и конфигурируемую систему шаблонов. Знакомство с ее работой можно начать с окна Solution Explorer текущего проекта в Visual Studio.

Каталог App_Code содержит код приложения. Пока там нет ничего кроме классов модели данных, но мы добавим определенный код, когда начнем настраивать сайт в следующих разделах. Папка App_Data содержит источник данных.

Папка DynamicData представляет больший интерес. Разверните ее в окне Solution Explorer, а затем откройте папку PageTemplates, как показано на рисунке ниже:

Каталог шаблонов страниц, используемых по умолчанию

Вы увидите пять файлов. Это страницы, которые система динамических данных ASP.NET применяет для отображения данных. Страница List.aspx - шаблон, используемый для перечисления записей таблицы, страница Details.aspx служит для просмотра подробных сведений о записи и т.д. Страница, с которой мы еще не сталкивались - ListDetails.aspx. Она будет применяться в разделе "Настройка с помощью маршрутов" в следующей статье. Все шаблоны страниц представляют собой пользовательские элементы управления, построенные с применением многофункциональных элементов управления данными, рассмотренных ранее.

Развернув остальные папки, вы получите представление о том, как отдельные части сайта динамических данных ASP.NET сочетаются друг с другом. Папка Filters содержит элемент управления, предназначенный для фильтрации строк, которые отображаются в списке записей. Папка FieldTemplates содержит элементы управления, используемые для отображения различных видов полей данных. Папка EntityTemplates поддерживает новую функцию динамических данных ASP.NET 4, которая называется шаблонами сущностей. Шаблоны сущностей - это код разметки, применяемый элементом управления DynamicData для форматирования элемента данных.

Папка CustomPages поддерживает один из механизмов настройки сайта динамических данных ASP.NET. В эту папку можно помещать собственные шаблоны страниц, чтобы настраивать способ отображения данных. Последняя папка, Content, содержит статические элементы, используемые для визуализации, а также элемент управления, который служит для постраничного вывода на экран списков записей.

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

Пройди тесты
Лучший чат для C# программистов