Пошаговое руководство. Добавление платформы динамических данных на существующие веб-сайты ASP.NET

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

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

В данном пошаговом руководстве используется проект веб-сайта. Вместо этого можно использовать проект веб-приложения. Сведения о различиях между этими типами веб-проектов см. в разделе Сравнение проектов веб-приложений с проектами веб-сайтов.

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

Для выполнения примеров в этом разделе необходимы следующие компоненты.

Проект Visual Studio с исходным кодом этого примера доступен на следующей странице: Adding Dynamic Data.

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

Создание проекта веб-приложения ASP.NET

  1. Запустите Visual Studio.

  2. В меню Файл выберите команду Создать, затем выберите пункт Проект.

    Откроется диалоговое окно Создать проект.

  3. В разделе Установленные шаблоны на левой панели щелкните элемент Visual Basic или Visual C#, а затем выберите Веб.

  4. В разделе Установленные шаблоны выберите пункт Пустой веб-узел.

  5. В поле Расположение введите имя папки, в которой будет храниться веб-приложение. Например, введите имя папки C:\WebSites\AddingDynamicData.

  6. Нажмите кнопку ОК.

Следующим этапом является добавление базы данных и создание модели данных, представляющей базу данных. Чтобы создать базу данных, в пустое веб-приложение нужно добавить копию базы данных AdventureWorksLT.

Добавление базы данных к веб-приложению

  1. В окне Обозреватель решений щелкните имя проекта правой кнопкой мыши и выберите команду Добавить.

  2. Щелкните пункт Добавить папку "ASP.NET", затем щелкните App_Data.

    Visual Studio создаст папку App_Data.

  3. В окне Обозреватель решений щелкните правой кнопкой мыши папку App_Data и выберите команду Добавить существующий элемент.

  4. В диалоговом окне Добавление существующего элемента укажите расположение файла базы данных AdventureWorksLT (AdventureWorksLT.mdf), после чего нажмите кнопку Добавить.

    В проекте будет создана копия файла базы данных. Дополнительные сведения см. в разделах Практическое руководство. Настройка образца базы данных AdventureWorksLT для разработки под ASP.NET и Практическое руководство. Подключение к базе данных AdventureWorksLT с помощью MDF-файла.

Теперь можно приступить к созданию модели данных, которая содержит классы, представляющие таблицы баз данных. Платформа динамических данных использует эти классы для взаимодействия с базой данных. В этом пошаговом руководстве используется модель данных LINQ-to-SQL. (Вместо нее можно использовать модель данных ADO.NET Entity Framework, однако в этом пошаговом руководстве используется модель данных LINQ to SQL.)

Создание модели данных

  1. В окне Обозреватель решений щелкните имя проекта правой кнопкой мыши и выберите команду Добавить.

    Щелкните пункт Добавить папку "ASP.NET", затем щелкните App_Code.

    Visual Studio создаст папку App_Code.

  2. В разделе Установленные шаблоны на левой панели выберите узел Данные.

  3. В центральной области выберите элемент Классы LINQ-SQL.

  4. В поле Имя введите имя AdventureWorksLT.dbml.

  5. Нажмите кнопку Добавить.

    Откроется Реляционный конструктор объектов.

  6. В окне Реляционный конструктор объектов щелкните ссылку Обозреватель серверов.

  7. В окне Обозреватель серверов в разделе Подключения данных разверните узел AdventureWorksLT_Data.mdf, затем разверните узел Таблицы. Если подключение не существует, дважды щелкните файл AdventureWorksLT_Data.mdf в окне Обозреватель серверов.

  8. Выберите все таблицы и перетащите их в окно Реляционный конструктор объектов.

  9. Закройте Обозреватель серверов.

  10. В меню Файл выберите команду Сохранить все.

    Visual Studio сохранит файл AdventureWorksLT.dbml и добавит соответствующую строку подключения в файл Web.config.

  11. Закройте файл AdventureWorksLT.dbml.

    Вы создали модель данных, представляющую базу данных AdventureWorksLT.

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

Регистрация контекста модели данных

  1. В окне Обозреватель решений щелкните правой кнопкой мыши имя проекта и выберите команду Добавить новый элемент.

  2. В центральной области раздела Установленные шаблоны Visual Studio выберите Глобальный класс приложения, затем щелкните Добавить.

    Visual Studio добавит файл Global.asax в приложение.

  3. Добавьте директивы @ Import с атрибутом Namespace, указывающим на пространства имен System.ComponentModel.DataAnnotations, System.Web.Routing, и System.Web.DynamicData так, как показано в следующем примере.

    <%@ Import Namespace="System.ComponentModel.DataAnnotations" %>
    <%@ Import Namespace="System.Web.Routing" %>
    <%@ Import Namespace="System.Web.DynamicData" %>
    
  4. Добавьте в метод Application_Start следующий выделенный код:

    void Application_Start(object sender, EventArgs e) 
    {
        // Create an instance of the data model. 
    MetaModel DefaultModel = new MetaModel();
       // Register the data model. 
        DefaultModel.RegisterContext(typeof(
          AdventureWorksLTDataContext),
          new ContextConfiguration() { ScaffoldAllTables = false });
    }
    

    Sub Application_Start(ByVal sender As Object, _
            ByVal e As EventArgs)
        ' Create an instance of the data model
        Dim DefaultModel As MetaModel 
        DefaultModel = New MetaModel
        ' Register the data model
        DefaultModel.RegisterContext(GetType( _
            AdventureWorksLTDataContext), _
            New ContextConfiguration() With {.ScaffoldAllTables = False})
    End Sub
    
  5. Сохраните файл Global.asax и оставьте его открытым.

Теперь можно зарегистрировать маршруты. Эти маршруты являются шаблонами URL-адресов, с помощью которых платформа динамических данных выбирает шаблон страницы, связываемый с операциями создания списка, вывода сведений, вставки и обновления. Каждый раз при нажатии пользователем ссылки "Изменить", "Сведения" и т. д., платформа динамических данных направляет запрос к соответствующему шаблону страницы.

Создание маршрутов

  1. Добавьте в метод Application_Start следующий выделенный код:

    void Application_Start(object sender, EventArgs e) 
    {
        // Register the data model. 
        DefaultModel.RegisterContext(typeof(
          AdventureWorksLTDataContext),
          new ContextConfiguration() { ScaffoldAllTables = false });
    
        // Create the routes.      
        RouteTable.Routes.Add(new    
            DynamicDataRoute("{table}/{action}.aspx"){
                Constraints = new RouteValueDictionary(new { 
                action = "List|Details|Edit|Insert" }),
                Model = DefaultModel});
    }
    

    Sub Application_Start(ByVal sender As Object, _
        ByVal e As EventArgs)
        ' Register the data model
        DefaultModel.RegisterContext(GetType( _
          AdventureWorksLTDataContext), _
           New ContextConfiguration() With {.ScaffoldAllTables = False})
    
        ' Create the routes.
        RouteTable.Routes.Add(New DynamicDataRoute( _ 
            "{table}/{action}.aspx") _
            With {.Constraints = New RouteValueDictionary( _
            New With {Key .Action = "List|Details|Edit|Insert"}), _
            .Model = DefaultModel})
    End Sub
    
  2. Сохраните изменения и закройте файл Global.asax.

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

Создание веб-сайта на платформе динамических данных

  1. В Visual Studio или Visual Web Developer в меню Файл выберите команду Создать, затем щелкните Веб-сайт.

    Откроется диалоговое окно Новый веб-узел.

  2. В левой области раздела Установленные шаблоны выберите элемент Visual Basic или Visual C#.

  3. В центральной панели выберите Веб-сайт динамических данных LINQ to SQL.

  4. В поле Расположение в Интернете выберите пункт Файловая система и введите имя папки, в которой будут храниться страницы веб-сайта.

    Например, введите имя папки C:\WebSites\ScaffoldingDynamicData.

  5. Нажмите кнопку ОК.

    Visual Studio создаст веб-сайт.

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

В этом разделе показано, как добавлять элементы формирования шаблонов.

Добавление элементов формирования шаблонов на платформе динамических данных

  1. В окне Проводник Windows откройте папку, в которой находится веб-сайт на платформе динамических данных, использующий формирование шаблонов (сайт, созданный в предыдущей процедуре).

  2. В проводнике Windows скопируйте папку DynamicData.

  3. В окне Обозреватель решений щелкните имя проекта правой кнопкой мыши и нажмите кнопку Вставить.

  4. Повторите следующие шаги для файлов Site.css и Site.master.

  5. Закройте Проводник Windows.

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

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

  • Для изменений полей данных выполняется проверка динамических данных.

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

Тестирование возможностей платформы динамических данных

  1. В окне Обозреватель решений щелкните правой кнопкой мыши имя проекта и выберите команду Добавить новый элемент.

  2. В центральной области раздела Установленные шаблоны Visual Studio выберите Веб-форма.

  3. В поле Имя введите Default.aspx.

  4. Убедитесь, что установлен флажок Размещать код в отдельном файле.

  5. Нажмите кнопку Добавить.

    Visual Studio добавит страницу Default.aspx на веб-сайт.

  6. Перейдите в представление Исходный код.

  7. Замените содержимое страницы по умолчанию следующей разметкой.

    <head id="Head1" runat="server">
        <title>Adding Dynamic Data to an ASP.NET Web Site</title>
        <link href="~/Site.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
      <h2 class="DDMainHeader">Adding Dynamic Data to an ASP.NET Web Site</h2>
      <form id="form1" runat="server">
        <div>
          <a href="SalesOrderDetails/List.aspx"> 
            Accessing SalesOrderDetails table using a GridView control and Dynamic Data</a>
        </div>  
      </form>
    </body>
    
  8. Сохраните файл Default.aspx.

  9. Откройте файл Global.asax.

  10. Временно включите формирование шаблонов, задав параметру ScaffoldAllTables значение true, как показано с помощью выделенного кода в следующем примере.

    void Application_Start(object sender, EventArgs e) 
    {
        // Register the data model. 
        DefaultModel.RegisterContext(typeof(
            AdventureWorksLTDataContext),
            new ContextConfiguration() { ScaffoldAllTables = true });
    }
    

    Sub Application_Start(ByVal sender As Object, _
        ByVal e As EventArgs)
        ' Register the data model
        DefaultModel.RegisterContext(GetType( _
            AdventureWorksLTDataContext), _
            New ContextConfiguration() With {.ScaffoldAllTables = True})
    End Sub
    

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

  11. Сохраните изменения и закройте файл Global.asax.

  12. В окне Обозреватель решений щелкните правой кнопкой мыши файл Default.aspx и выберите команду Просмотреть в браузере.

  13. На странице Default.aspx щелкните ссылку на таблицу SalesOrderDetails.

    В браузере откроется страница, отображающая таблицу SalesOrderDetails с помощью шаблона страницы List.aspx на платформе динамических данных.

  14. В любой строке щелкните Изменить для поля UnitPrice.

  15. На странице внесения изменений введите нечисловое значение.

  16. Нажмите кнопку Обновить.

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

  17. Нажмите кнопку Отмена.

  18. Выберите команду Изменить для любой строки и замените значение в столбце UnitPrice на значение, не превышающее максимальное целое значение, разрешенное в базе данных (32767).

  19. Нажмите кнопку Обновить.

    Платформа динамических данных обновит базу данных. Так как введено верное значение, данные проходят проверку платформы динамических данных.

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

  20. Откройте файл Global.asax.

  21. Отключите формирование шаблонов, задав параметру ScaffoldAllTables значение false.

  22. Сохраните изменения и закройте файл Global.asax.

В этом разделе рассматривается, как добавить особые сведения (метаданные) в модель данных. Это позволит управлять обработкой полей данных платформой динамических данных. Для настройки модели данных создается разделяемый класс. Этот класс расширяет модель данных и позволяет связать особые метаданные с полями данных.

Создание разделяемого класса

  1. В окне Обозреватель решений щелкните правой кнопкой мыши папку App_Code и выберите команду Добавить новый элемент.

  2. В левой области группы Установленные шаблоны выберите язык программирования.

  3. В центральной области выберите пункт Класс .

  4. В поле Имя введите SalesOrderDetails.cs или SalesOrderDetails.vb.

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

  5. Нажмите кнопку Добавить.

    Visual Studio открывает новый файл класса.

  6. Скопируйте следующий код в этот файл, заменив весь существующий код файла.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.DynamicData;
    using System.ComponentModel.DataAnnotations;
    
    // Define the enumeration to apply to the OrderQty data field.
    public enum QtyEnum
    {
        None = 0,
        Small1 = 1,
        Small2 = 2,
        Small3 = 3,
        Small4 = 4,
        Small5 = 5,
        Small6 = 6,
        Small7 = 7,
        Small8 = 8,
        Small9 = 9,
        Medium10 = 10,
        Medium11 = 11,
        Medium12 = 12,
        Medium13 = 13,
        Medium14 = 14,
        Medium15 = 15,
        Medium16 = 16,
        Medium17 = 17,
        Medium18 = 18,
        Medium19 = 19,
        Large21 = 21,
        Large22 = 22,
        Large23 = 23,
        Large24 = 24,
        Large25 = 25
      }
    
    [MetadataType(typeof(SalesOrderDetailMetadata))]
    // Enable table scaffolding. This enables the table to be
    // displayed and enables action links to be created.
    [ScaffoldTable(true)]
    public partial class SalesOrderDetail { }
    
    public partial class SalesOrderDetailMetadata
    {
        // The following code causes Dynamic Data to create 
        // a drop-down list that lets users filter based on the 
        // QtyEnum enumeration.
        [EnumDataType(typeof(QtyEnum))]
        public object OrderQty { get; set; }
    
        // Apply a custom date format that does not
        // show the current time.
        [DataType(DataType.Date)]
        public object ModifiedDate { get; set; }
    }
    

    Imports System
    Imports System.Collections.Generic
    Imports System.Linq
    Imports System.Web
    Imports System.Web.DynamicData
    Imports System.ComponentModel.DataAnnotations
    
    ' Define the enumeration to apply to the OrderQty data field.
    Public Enum QtyEnum
        None = 0
        Small1 = 1
        Small2 = 2
        Small3 = 3
        Small4 = 4
        Small5 = 5
        Small6 = 6
        Small7 = 7
        Small8 = 8
        Small9 = 9
        Medium10 = 10
        Medium11 = 11
        Medium12 = 12
        Medium13 = 13
        Medium14 = 14
        Medium15 = 15
        Medium16 = 16
        Medium17 = 17
        Medium18 = 18
        Medium19 = 19
        Large21 = 21
        Large22 = 22
        Large23 = 23
        Large24 = 24
        Large25 = 25
    End Enum
    
    ' Enable table scaffolding. This enables
    ' the table to be displayed and enables 
    ' action links to be created. 
    <MetadataType(GetType(SalesOrderDetailMetadata)), _ ScaffoldTable(True)> _
    Partial Public Class SalesOrderDetail
    
    End Class
    
    Partial Public Class SalesOrderDetailMetadata
        ' The following code causes Dynamic Data to create 
        ' a drop-down list that lets users filter based on 
        ' the QtyEnum enumeration.
        <EnumDataType(GetType(QtyEnum))>
        Public Property OrderQty() As Object
    
        ' Apply a custom date format that does not
        ' show the current time.
        <DataType(DataType.Date)>
        Public Property ModifiedDate() As Object
    End Class 
    

    Этот код создает два класса: разделяемый класс с именем SalesOrderDetail и внутри класса SalesOrderDetail, класс с именем SalesOrderDetailMetadata.

    ПримечаниеПримечание

    Имена классов — SalesOrderDetail (а не SalesOrderDetails), поскольку в моделях данных LINQ-to-SQL имена таблиц имеют форму единственного числа.

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

    • Добавление метаданных в класс SalesOrderDetail для использования формирования шаблонов таблиц. Таким образом обеспечивается автоматическое отображение таблиц и создание ссылок (например, "Изменить" или "Сведения"), указывающих на шаблоны страниц на платформе динамических данных.

    • Добавление метаданных в поле данных OrderQty для фильтрации данных на основе пользовательского перечисления.

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

    Использование разделяемых классов позволяет гибко изменять поведение модели данных без ее непосредственного изменения.

  7. Сохраните и закройте файл.

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

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

  • Строки таблицы могут быть отфильтрованы по пользовательскому перечислению OrderQty.

  • В поле данных ModifiedDate отображаются даты без текущего времени.

Тестирование настройки модели данных

  1. В окне Обозреватель решений щелкните правой кнопкой мыши файл Default.aspx и выберите команду Просмотреть в браузере.

  2. На странице Default.aspx щелкните ссылку на таблицу SalesOrderDetails.

    В браузере откроется страница, отображающая таблицу SalesOrderDetails с помощью шаблона страницы List.aspx на платформе динамических данных.

  3. Убедитесь, что фильтр поля данных OrderQty отображается.

  4. В раскрывающемся списке OrderQty выберите какое-либо значение.

  5. Убедитесь, что строки таблицы SalesOrderDetails отфильтрованы в соответствии с выбранным значением.

  6. В любой строке щелкните Изменить и в поле ModifiedDate на странице внесения изменений введите текущую дату.

  7. Нажмите кнопку Обновить.

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

  8. Закройте браузер.

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

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

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

Также можно поэкспериментировать с другими возможностями платформы динамических данных. Ниже приведены некоторые дополнительные рекомендации.

Чтобы получить общие сведения, можно сделать следующее.

  • Узнайте, как использовать Реляционный конструктор объектов в веб-приложении для создания классов данных, представляющих базу данных SQL Server. Дополнительные сведения см. в разделе Практическое руководство. Создание классов LINQ to SQL в веб-проекте.

  • Рассмотрите объектно-реляционное сопоставление LINQ-to-SQL. Дополнительные сведения см. в разделе LINQ-to-SQL.

  • Узнайте, как выполняется сопоставление объектов в платформе ADO.NET Entity Framework. Дополнительные сведения см. в разделе ADO.NET Entity Framework.

Показ: