Упражнение. Настройка проекта
Ваша команда разделила работу для приложения управления инвентаризацией пиццы. Ваши товарищи по команде создали веб-приложение ASP.NET Core, и они уже создали службу для чтения и записи данных пиццы в базу данных. Вы были назначены для работы на странице списка пицц, которая будет отображать список пицц и позволяет добавлять новые пиццы в базу данных. Начнем с экскурсии по проекту, чтобы понять, как она организована.
Примечание.
В этом модуле используются .NET CLI (интерфейс командной строки) и Visual Studio Code для локальной разработки. После выполнения этого модуля можно применить основные понятия с помощью Visual Studio (Windows) или продолжения разработки с помощью Visual Studio Code (Windows, Linux и macOS).
Получение файлов проекта
Если вы используете GitHub Codespaces, просто откройте репозиторий в браузере, выберите "Код" и создайте новое пространство кода в main
ветви.
Если вы не используете GitHub Codespaces, получите файлы проекта и откройте их в Visual Studio Code, выполнив следующие действия:
Откройте командную оболочку и клонируйте проект из GitHub с помощью командной строки:
git clone https://github.com/MicrosoftDocs/mslearn-create-razor-pages-aspnet-core
Перейдите к каталогу
mslearn-create-razor-pages-aspnet-core
и откройте проект в Visual Studio Code:cd mslearn-create-razor-pages-aspnet-core code .
Совет
Если у вас установлена совместимая среда выполнения контейнера, можно использовать расширение "Контейнеры разработки", чтобы открыть репозиторий в контейнере с предварительно установленными средствами.
Просмотр работы товарищей по команде
Давайте рассмотрим существующий код в папке ContosoPizza. Проект — это веб-приложение ASP.NET Core, созданное dotnet new webapp
с помощью команды. Изменения, внесенные товарищами по команде, описаны ниже.
Совет
Не тратьте слишком много времени на просмотр этих изменений. Ваши товарищи по команде уже выполнили работу по созданию базы данных и службы для чтения и записи пицц в базу данных, но они не вносили никаких изменений в пользовательский интерфейс. Вы создадите пользовательский интерфейс, который использует свою службу в следующем уроке.
- Папка Models была добавлена в проект.
- Папка модели содержит
Pizza
класс, представляющий пиццу.
- Папка модели содержит
- Папка данных была добавлена в проект.
- Папка данных содержит
PizzaContext
класс, представляющий контекст базы данных. Он наследует отDbContext
класса в Entity Framework Core. Entity Framework Core — это реляционная реляционная карта (ORM), которая упрощает работу с базами данных.
- Папка данных содержит
- Папка "Службы" была добавлена в проект.
- Папка служб содержит
PizzaService
класс, предоставляющий методы для перечисления и добавления пиццы. - Класс
PizzaService
используетPizzaContext
класс для чтения и записи пицц в базу данных. - Класс регистрируется для внедрения зависимостей в Program.cs (строка 10).
- Папка служб содержит
Entity Framework Core также создал несколько вещей:
- Была создана папка Migrations.
- Папка миграций содержит код для создания схемы базы данных.
- Был создан файл базы данных SQLite, ContosoPizza.db .
- Если у вас установлено расширение SQLite (или используется GitHub Codespaces), вы можете просмотреть базу данных, щелкнув файл правой кнопкой мыши и выбрав "Открыть базу данных". Схема базы данных показана на вкладке SQLite Explorer панели обозревателя.
Просмотрите структуру проекта Razor Pages
Все остальное в проекте остается неизменным после создания проекта. В следующей таблице описывается структура проекта, созданная командой dotnet new webapp
.
Имя | Описание |
---|---|
Pages/ | Содержит Razor Pages и вспомогательные файлы. Каждая страница Razor содержит CSHTML-файл и файл класса .cshtml.csPageModel . |
wwwroot/ | Содержит статические файлы ресурсов, такие как HTML, JavaScript и CSS. |
ContosoPizza.csproj | Содержит метаданные конфигурации проекта, такие как зависимости. |
Program.cs | Служит точкой входа приложения и настраивает поведение приложения, например маршрутизацию. |
Другие заметные наблюдения:
Файлы страниц Razor и их парный
PageModel
файл классаСтраницы Razor хранятся в каталоге Pages . Как отмечалось выше, каждая страница Razor содержит CSHTML-файл и файл класса .cshtml.cs
PageModel
. КлассPageModel
позволяет разделить логику и презентацию страницы Razor, определяет обработчики страниц для запросов, а также инкапсулирует свойства данных и логику, область действия которой находится на странице Razor.Структура каталогов Pages и запросы маршрутизации
Razor Pages использует структуру каталогов Pages в качестве соглашения для запросов маршрутизации. В следующей таблице показано, как URL-адреса сопоставляют с именами файлов:
URL Карта со страницей Razor www.domain.com
Pages/Index.cshtml www.domain.com/Index
Pages/Index.cshtml www.domain.com/Privacy
Pages/Privacy.cshtml www.domain.com/Error
Pages/Error.cshtml Вложенные папки в каталоге Pages используются для упорядочивания страниц Razor. Например, если был каталог Pages/Products , URL-адреса будут отражать следующую структуру:
URL Карта со страницей Razor www.domain.com/Products
Pages/Products/Index.cshtml www.domain.com/Products/Index
Pages/Products/Index.cshtml www.domain.com/Products/Create
Pages/Products/Create.cshtml Макет и другие общие файлы
Существует несколько файлов, совместно используемых на нескольких страницах. Эти файлы определяют общие элементы макета и импорт страницы. В следующей таблице описывается назначение каждого файла.
Файл Description _ViewImports.cshtml Импортирует пространства имен и классы, используемые на нескольких страницах. _ViewStart.cshtml Задает макет по умолчанию для всех страниц Razor. Pages/Shared/_Layout.cshtml Это макет, указанный файлом _ViewStart.cshtml
. Реализует общие элементы макета на нескольких страницах.Pages/Shared/_ValidationScriptsPartial.cshtml Предоставляет функции проверки для всех страниц.
Запуск проекта в первый раз
Давайте запустите проект, чтобы увидеть его в действии.
Щелкните правой кнопкой мыши папку ContosoPizza в обозревателе и выберите "Открыть в интегрированном терминале". Откроется окно терминала в контексте папки проекта.
В окне терминала введите следующую команду:
dotnet watch
Команда:
- Выполняет построение проекта.
- Запускает приложение.
- Отслеживает изменения файлов и перезапускает приложение при обнаружении изменения.
Интегрированная среда разработки предложит открыть приложение в браузере. Выберите Открыть в браузере.
Совет
Вы также можете открыть приложение, найдя URL-адрес в окне терминала. Удерживайте клавишу CTRL и щелкните URL-адрес, чтобы открыть его в браузере.
Сравните отрисованную домашнюю страницу со Pages/Index.cshtml в интегрированной среде разработки:
- Просмотрите сочетание кода HTML, Razor и C# в файле.
- Синтаксис Razor обозначается символами
@
. - Код C# заключен в
@{ }
блоки. Запишите директивы в верхней части файла: - Директива
@page
указывает, что этот файл является страницей Razor. - Директива
@model
указывает тип модели для страницы (в данном случае ,IndexModel
который определен в Pages/Index.cshtml.cs).
- Синтаксис Razor обозначается символами
- Просмотрите блок кода C#.
- Код задает значение
Title
элемента вViewData
словаре на начальную страницу. - Словарь
ViewData
используется для передачи данных между страницей Razor и классомIndexModel
. - Во время выполнения
Title
значение используется для задания элемента страницы<title>
.
- Код задает значение
- Просмотрите сочетание кода HTML, Razor и C# в файле.
Оставьте приложение запущенным в окне терминала. Мы будем использовать его в предстоящих уроках. Оставьте вкладку браузера с запущенным приложением Contoso Pizza тоже. Вы внесете изменения в приложение, и браузер автоматически обновится, чтобы отобразить изменения.
Настройка целевой страницы
Давайте внесите несколько изменений на целевую страницу, чтобы сделать его более актуальным для приложения пиццы.
В Pages/Index.cshtml замените код в блоке кода C# следующим кодом:
ViewData["Title"] = "The Home for Pizza Lovers"; TimeSpan timeInBusiness = DateTime.Now - new DateTime(2018, 8, 14);
Предыдущий код:
- Задает значение
Title
элемента вViewData
словаре "Главная для любителей пиццы". - Вычисляет время, прошедшее с момента открытия бизнеса.
- Задает значение
Измените HTML следующим образом:
Замените
<h1>
элемент следующим кодом:<h1 class="display-4">Welcome to Contoso Pizza</h1>
Замените
<p>
элемент следующим кодом:<p class="lead">The best pizza in town for @Convert.ToInt32(timeInBusiness.TotalDays) days!</p>
Предыдущий код:
- Изменяет заголовок на "Добро пожаловать в Contoso Pizza".
- Отображает количество дней, прошедших с момента открытия бизнеса.
- Символ
@
используется для переключения с HTML на синтаксис Razor. - Метод
Convert.ToInt32
используется для преобразованияTotalDays
свойства переменнойtimeInBusiness
в целое число. - Класс
Convert
является частьюSystem
пространства имен, который импортируется<ImplicitUsings>
автоматически элементом в файле ContosoPizza.csproj .
- Символ
Сохраните файл. Вкладка браузера с приложением автоматически обновляется, чтобы отобразить изменения. Если вы используете GitHub Codespaces, файл сохраняется автоматически, но вам потребуется обновить вкладку браузера вручную.
Внимание
Следите за окном терминала при dotnet watch
каждом сохранении файла. Иногда код может содержать то, что вызывает грубый редактирование. Это означает, что измененный код нельзя перекомпилировать без перезапуска приложения. Если появится запрос на перезапуск приложения, нажмите y
клавишу (да) или a
(всегда). Вы всегда можете остановить приложение, дважды нажав клавиши CTRL+C в окне терминала, а затем перезапустить его, снова выполнив команду dotnet watch
.
Вы внесли первые изменения на страницу Razor! В следующем уроке вы добавите новую страницу в приложение, чтобы отобразить список пицц.