Перейти к содержанию

Магазин на Asp.Net Core MVC EF. Часть 5

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...

[ Полезный рекламный блок ]

Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.


В этой статье, мы продолжим писать магазин на Asp.Net Core и Entity Framework Core. В четвертой части мы узнали каким образом адаптировать приложение GameStore для работы с более крупными объемами данных. Добавили к нему поддержку разбиения на страницы, упорядочения и поиска данных.  Для ознакомления с четвертой частью, перейдите по ссылке.

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

Магазин на Asp.Net Core MVC EF. Часть 5

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

Модификация модели данных

Добавление начальных данных о товарах

Создание и применение миграции

Отображение товаров для покупателя

Создание URL возврата

Добавление корзины для покупок

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

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

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

Изложение материала в статье будет вестись ускоренными темпами, поскольку большая часть работы касается построения средств с использованием ASP.NET Core МVС поверх фундамента, сформированного с помощью инфраструктуры Entity Fгamework Core в предыдущих главах.

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

В предыдущей главе класс PagedList применялся в представлениях без модификации модели представления просто для демонстрации того, что средства масштабирования можно добавить, внеся минимальные изменения. В настоящей главе класс PagedList будет использоваться в представлениях напрямую, поэтому добавим содержащее его пространство имен в файл импортирования представлений Views / _ViewImports.cshtml:

Модификация модели данных

Что бы подготовить модель данных к работе со средствами интерфейса для покупателей, добавим в класс Product свойство Description, которое позволит покупателям получить немного сведений о товаре:

Для облегчения запроса и сохранения данных по категории добавим в класс Саtegory навигационное свойство, которое инфраструктура Entity Framework Core сможет заполнять связанными объектами Product:

Добавление начальных данных о товарах

Нам необходима возможность переключения между крупными объемами тестовых данных и небольшими объемами реалистичных данных. С этой целью добавим в контроллер Seed код, который обеспечит наличие стандартных категорий и товаров GameStore, создадим метод CreateProductionData:

Новый метод действия создает последовательность объектов Category и устанавливает навигационное свойство Products в коллекцию объектов Product. Все объекты передаются методу AddRange() и сохраняются в БД методом SaveChanges().

Чтобы нацелиться на новый метод действия, добавим в представление Index, применяемое контроллером Seed, следующий элемент:

Элемент button отправляет НТГР-запрос POST, результатом которого будет очистка БД и ее заполнение стандартными категориями и товарами GameStore.

Создание и применение миграции

Чтобы обновить БД, потребуется создать и применить к ней миграцию.

Для создания миграции в окне Package Manager Console введите следующую команду:

add migration asp.net core

Для выполнения инструкций миграции, в окне Package Manager Console выполните команду:

Первая команда создает новую миграцию по имени AddCustomer, которая будет содержать команды, требующиеся для подготовки БД к хранению новых объектов. Вторая команда выполняет такие команды для обновления БД.

Запустите приложение, перейдите на страницу “Начальные данные” очистите таблицы и заполните продуктами. Проверьте работу приложения.

asp.net core products list

Отображение товаров для покупателя

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

Подготовка модели данных

Чтобы приступить к части приложения, связанной с интерфейсом для покупателей, добавьте возможность запрашивания объектов Product по их категории, начав с интерфейса хранилища IProduct:

Внесем соответствующее изменение в класс реализации, применяя LINQ-мeтoд Where() для запрашивания на основе свойства внешнего ключа, которое ассоциирует объект Product со связанным объектом Category, изменим реализацию метода в классе ProductRepository:

Интерфейс IQueryable<T> позволяет формировать запрос на основе параметров метода, создавая объект, который будет запрашивать БД, только когда он перечисляется. Это преимущество работы с объектами IQueryable<T>, хотя есть и недостаток — легкость, с которой можно непредумышленно инициировать дублированные запросы.

Создание URL возврата

Нам необходимо знать, на какой URL переходить после того, как пользователь выбрал товар. Для облегчения процесса создадим папку Infrastructure и добавим в нее файл класса по имени UrlExtensions.cs со следующим кодом:

В классе UrlExtensions определяется расширяющий метод PathAndQuery(), который будет использоваться в элементе form.

Перейдем в файл Views / ViewImports.cshtml, добавим туда следующее пространство имен:

Создание контроллера Store, представлений и компоновки

Чтобы предоставить контроллер, который будет представлять данные покупателю, добавим в папку Controllers файл по имени StoreController.cs и поместим в него следующий код:

Для управления отображением данных Product и Category используются два объекта QueryOptions. Они применяются для получения объекта PagedList<Product>, который передается представлению как его модель, и объекта PagedList<Category>. добавляемого к ViewBag.

Чтобы обеспечить средствам интерфейса для покупателей компоновку, создадим папку Views / Store и поместим в нее файл по имени _Layout.cshtml со следующим содержимым:

Компоновка представляет стандартный заголовок “Магазин игр, с заполнителем вместо сводки по корзине для покупок, которая будет добавлена в приложение позже. Для отображения списка товаров добавим в папку Views / Store файл по имени Index.cshtml со следующим содержимым:

В представлении Index собрано вместе несколько средств, для отображения товаров, включая разбиение на страницы и поддержку поиска. Чтобы отобразить пользователю список категорий, добавим в папку Views / Store файл по имени Categories.cshtml со следующим содержимым:

Представление Categories отображает список доступных категорий и предлагает кнопки Previous (Предыдущая) и Next (Следующая) для листания списка. Элементы button, выбирающие категории, применяют НТМL-форму по имени pagesform для нацеливания на контроллер с помощью значения первичного ключа выбранной категории.

Для тестирования результата, запустим приложение и перейдем по адресу:

https://localhost:7191/store

Проверьте, как работает поиск, навигация, выбор категории.

asp.net core products list

Можете так же проверить, как контроллер Store справляется с крупными объемами данных, перейдя по ссылке https://localhost:7191/seed и сгенерировав крупный объём данных.

Так как модель продукта была изменена, мы добавили описание к товару, необходимо изменить функцию наполнения товаров. Для этого, перейдем в контроллер Seed, изменим определение метода CreateSeedData():

Добавление корзины для покупок

Конфигурирование сессии

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

Чтобы включить сеансы в БД, добавим в класс Program, следующий код:

Средство сеансов будет сохранять только значения string. Для облегчения работы с этим средством добавьте в папку Infrastructure файл класса по имени SessionExtensions.cs со следующим содержимым:

В классе SessionExtensions определены расширяющие методы, которые сериализируют объекты в формат JSON и восстанавливают их снова, позволяя легко сохранять простые объекты как данные сеанса.

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

Для представления выбранных покупателем товаров добавьте в папку Models файл по имени Cart.cs и определите в нем класс со следующим содержимым:

Класс Cart управляет коллекцией объектов OrderLine, которая представляет выбранные товары и может быть легко сохранена в БД при создании заказа.

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

Чтобы предоставить логику, поддерживающую работу с объектами Cart, добавьте в Controllers файл по имени CartController.cs и поместите в него следующий код:

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

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

Чтобы снабдить новый контроллер представлением для управления корзиной, создайте папку Views / Cart и добавьте в нее файл по имени Index.cshtml со следующим содержимым:

Представление отображает сводку по товарам, выбранным покупателем, и предлагает кнопки, которые позволяют возвратиться к списку товаров или продолжить оформление заказа. Чтобы собрать информацию для создания заказа, добавим в папку Views / Cart файл по имени CreateOrder.cshtml со следующим содержимым:

Для отображения пользователю сообщения о том, что заказ создан, добавим в папку Views / Cart файл по имени Completed.cshtml со следующим содержимым:

Чтобы создать представление для виджета (графического элемента) со сводкой по корзине, создадим папку Views / Shared / Components / Cart и добавим в нее файл по имени Default.cshtml со следующим содержимым:

Представление Default отображает количество элементов в корзине и их общую стоимость. Также имеется кнопка, которая переместит на контроллер Cart, если представление было визуализировано другим контроллером. Чтобы отобразить виджет корзины, с помощью метода Component.InvokeAsync() добавим компонент представления в компоновку, используемую для функциональных средств магазина Views / Store / _Layout.cshtml:

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

asp.et core products list

После этого перейдите в корзину, просмотрите добавленные товары, выполните удаление любого из них.

asp.net core cart

Нажмите оформить заказ, заполните данные на форме:

asp.net core order details

Нажмите кнопку “Оформить заказ”.

asp.net core page message

Итог

В главе работа над приложением GameStore продолжилась добавлением средств интерфейса для покупателей. Был создан список товаров, который пользователь может пролистывать, искать в нем товары или фильтровать их по категориям. Выбранные товары добавляются в корзину, которая затем может применяться для оформления заказа, сохраняемого в БД. Большинство функциональных средств, добавленных в главе, используют инфраструктуру МVС для создания надстройки поверх фундамента Entity Framework Саге, образованного в предшествующих главах. Такой шаблон вы будете видеть и в собственных проектах — большой объем первоначальной конфигурации модели данных и кода, а затем набор средств пользовательского интерфейса, которые быстро встают на свои места. В следующей главе проект приложения GameStore завершается созданием веб-службы REST.

На этом статья «Магазин на Asp.Net Core MVC EF», подошла к концу, надеюсь вам было интересно. Вы можете скачать исходный код в моем репозитории — Github.

Поделитесь вашим опытом в комментариях, какой был ваш первый проект, магазин на Asp.Net Core MVC EF или что-то другое?

Так же вам может быть интересна предыдущая статья:

Отправка Email в Asp.Net Core


Вы хотите научится писать код на языке программирования C#?

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

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

  • Доступ к пройденному материалу
  • Тематические статьи
  • Библиотека книг
  • Онлайн тестирование
  • Общение в закрытых группах

https://dijix.com.ua

Живи в своем мире, программируй в нашем.


 

Опубликовано в рубрикеAsp.Net Core
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x