Поделиться через


Отображение таблицы данных в базе данных (C#)

от Майкрософт

Загрузить PDF-файл

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

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

Создание классов моделей

Мы отобразим набор записей из таблицы базы данных Movies. Таблица базы данных Movies содержит следующие столбцы:

Имя столбца Тип данных Разрешить значения NULL
Идентификатор Int Неверно
Заголовок Nvarchar(200) Неверно
Директор NVarchar(50) Неверно
Дата, дата, датасложенная Дата и время Неверно

Чтобы представить таблицу Movies в приложении MVC ASP.NET, необходимо создать класс модели. В этом руководстве мы используем Microsoft Entity Framework для создания классов моделей.

Примечание

В этом руководстве мы используем Microsoft Entity Framework. Однако важно понимать, что вы можете использовать различные технологии для взаимодействия с базой данных из ASP.NET приложения MVC, включая LINQ to SQL, NHibernate или ADO.NET.

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

  1. Щелкните правой кнопкой мыши папку Models в окне Обозреватель решений и выберите пункт меню Добавить, Новый элемент.
  2. Выберите категорию Данные и выберите шаблон модель ADO.NET entity Data Model .
  3. Присвойте модели данных имя MoviesDBModel.edmx и нажмите кнопку Добавить .

После нажатия кнопки Добавить откроется мастер моделей entityяныхх параметров (см. рис. 1). Чтобы завершить работу мастера, выполните следующие действия.

  1. На шаге Выбор содержимого модели выберите параметр Создать из базы данных .
  2. На шаге Выбор подключения к данным используйте подключение к данным MoviesDB.mdf и имя MoviesDBEntities для параметров подключения. Нажмите кнопку Далее.
  3. На шаге Выбор объектов базы данных разверните узел Таблицы и выберите таблицу Фильмы. Введите пространство имен Models (Модели ) и нажмите кнопку Готово .

Создание классов LINQ to SQL

Рис. 01. Создание классов LINQ to SQL (щелкните для просмотра полноразмерного изображения)

После завершения работы мастера модели сущностей откроется Designer Entity Data Model ( Модель entityяныхх). В Designer должна отображаться сущность Movies (см. рис. 2).

Designer модели данных сущностей

Рис. 02. Модель данных сущности Designer (щелкните для просмотра полноразмерного изображения)

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

Дважды щелкните имя класса в области конструктора и измените имя класса с Movies на Movie. После внесения этого изменения нажмите кнопку Сохранить (значок дискеты), чтобы создать класс Movie.

Создание контроллера Movies

Теперь, когда у нас есть способ представить записи базы данных, можно создать контроллер, который возвращает коллекцию фильмов. В окне Обозреватель решений Visual Studio щелкните правой кнопкой мыши папку Контроллеры и выберите пункт меню Добавить, Контроллер (см. рис. 3).

Меню

Рис. 03. Меню "Добавить контроллер" (щелкните для просмотра полноразмерного изображения)

Когда откроется диалоговое окно Добавление контроллера , введите имя контроллера MovieController (см. рис. 4). Нажмите кнопку Добавить , чтобы добавить новый контроллер.

Диалоговое окно

Рис. 04. Диалоговое окно "Добавление контроллера" (щелкните для просмотра полноразмерного изображения)

Необходимо изменить действие Index(), предоставляемое контроллером Movie, чтобы оно возвращало набор записей базы данных. Измените контроллер так, чтобы он выглядел как контроллер в листинге 1.

Листинг 1. Controllers\MovieController.cs

using System.Linq;

using System.Web.Mvc;

using MvcApplication1.Models; 

namespace MvcApplication1.Controllers

{

    public class MovieController : Controller

    {

        //

        // GET: /Movie/ 

        public ActionResult Index()

        {

            var entities = new MoviesDBEntities();

            return View(entities.MovieSet.ToList());

        } 

    }

}

В листинге 1 для представления базы данных MoviesDB используется класс MoviesDBEntities. Чтобы использовать этот класс, необходимо импортировать пространство имен MvcApplication1.Models следующим образом:

использование MvcApplication1.Models;

Сущности выражения. MovieSet.ToList() возвращает набор всех фильмов из таблицы базы данных Movies.

Создание представления

Самый простой способ отобразить набор записей базы данных в таблице HTML — воспользоваться преимуществами формирования шаблонов, предоставляемых Visual Studio.

Выполните сборку приложения, выбрав пункт меню Сборка, Сборка решения. Необходимо выполнить сборку приложения перед открытием диалогового окна Добавление представления , иначе классы данных не будут отображаться в диалоговом окне.

Щелкните правой кнопкой мыши действие Index() и выберите пункт меню Добавить представление (см. рис. 5).

Добавление представления

Рис. 05. Добавление представления (щелкните, чтобы просмотреть полноразмерное изображение)

В диалоговом окне Добавление представления проверка флажок Создать строго типизированное представление. Выберите класс Movie в качестве класса данных представления. Выберите Список в качестве содержимого представления (см. рис. 6). При выборе этих параметров будет создано строго типизированное представление, в котором отображается список фильмов.

Диалоговое окно

Рис. 06. Диалоговое окно "Добавить представление" (щелкните для просмотра полноразмерного изображения)

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

Листинг 2. Views\Movie\Index.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.Movie>>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

      Index

</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Index</h2> 

    <table>

        <tr>

            <th></th>

            <th>

                Id

            </th>

            <th>

                Title

            </th>

            <th>

                Director

            </th>

            <th>

                DateReleased

            </th>

        </tr> 

    <% foreach (var item in Model) { %>

        <tr>

            <td>

                <%= Html.ActionLink("Edit", "Edit", new { id=item.Id }) %> |

                <%= Html.ActionLink("Details", "Details", new { id=item.Id })%>

            </td>

            <td>

                <%= Html.Encode(item.Id) %>

            </td>

            <td>

                <%= Html.Encode(item.Title) %>

            </td>

            <td>

                <%= Html.Encode(item.Director) %>

            </td>

            <td>

                <%= Html.Encode(String.Format("{0:g}", item.DateReleased)) %>

            </td>

        </tr>

    <% } %> 

    </table> 

    <p>

        <%= Html.ActionLink("Create New", "Create") %>

    </p> 

</asp:Content>

Вы можете запустить приложение, выбрав пункт меню Отладка, Начать отладку (или нажав клавишу F5). Запуск приложения запускает интернет-Обозреватель. Если вы перейдете по URL-адресу /Movie, вы увидите страницу на рис. 7.

Таблица фильмов

Рис. 07. Таблица фильмов (щелкните для просмотра полноразмерного изображения)

Если вам не нравится внешний вид сетки записей базы данных на рис. 7, можно просто изменить представление индекса. Например, можно изменить заголовок DateReleased на Date Released , изменив представление индекса.

Создание шаблона с частичным

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

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

  1. Щелкните правой кнопкой мыши папку Views\Movie и выберите пункт меню Добавить представление.
  2. Установите флажок Создать частичное представление (ASCX).
  3. Присвойте частичному имени MovieTemplate.
  4. Установите флажок Создать строго типизированное представление.
  5. Выберите Movie в качестве класса данных представления.
  6. Выберите Пустой в качестве содержимого представления.
  7. Нажмите кнопку Добавить , чтобы добавить часть в проект.

После выполнения этих действий измените часть MovieTemplate так, чтобы она выглядела так, как в листинге 3.

Листинг 3. Views\Movie\MovieTemplate.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication1.Models.Movie>" %> 

<tr>

    <td>

        <%= Html.Encode(Model.Id) %>

    </td>

    <td>

        <%= Html.Encode(Model.Title) %>

    </td>

    <td>

        <%= Html.Encode(Model.Director) %>

    </td>

    <td>

        <%= Html.Encode(String.Format("{0:g}", Model.DateReleased)) %>

    </td>

</tr>

Часть в листинге 3 содержит шаблон для одной строки записей.

В измененном представлении индекса в листинге 4 используется часть MovieTemplate.

Листинг 4. Views\Movie\Index.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication1.Models.Movie>>" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Index</h2> 

    <table>

        <tr>

            <th>

                Id

            </th>

            <th>

                Title

            </th>

            <th>

                Director

            </th>

            <th>

                DateReleased

            </th>

        </tr> 

    <% foreach (var item in Model) { %>

        <% Html.RenderPartial("MovieTemplate", item); %>

    <% } %> 

    </table> 

</asp:Content>

Представление в листинге 4 содержит цикл foreach, который выполняет итерацию по всем фильмам. Для каждого фильма для форматирования фильма используется часть MovieTemplate. MovieTemplate отображается путем вызова вспомогательного метода RenderPartial().

В измененном представлении индексов отображается та же САМАЯ HTML-таблица записей базы данных. Однако эта точка зрения была значительно упрощена.

Метод RenderPartial() отличается от большинства других вспомогательных методов, так как он не возвращает строку. Поэтому необходимо вызвать метод RenderPartial(), используя <% Html.RenderPartial(); %> вместо <%= Html.RenderPartial(); %>.

Итоги

Цель этого руководства — объяснить, как отобразить набор записей базы данных в таблице HTML. Во-первых, вы узнали, как возвращать набор записей базы данных из действия контроллера, используя преимущества Microsoft Entity Framework. Затем вы узнали, как использовать формирование шаблонов Visual Studio для создания представления, которое автоматически отображает коллекцию элементов. Наконец, вы узнали, как упростить представление, используя преимущества части. Вы узнали, как использовать часть в качестве шаблона, чтобы можно было форматировать каждую запись базы данных.