Вежбе – Пети час – Додавање корпе
Наставак унапређивања и додавања нових функционалности интернет продавници.
Креирање корпе
- Креирати класу Models/Korpa.cs
- Изменити ProizvodIspis.cshtml: додати дугме за додавање производа у корпу и поље за одабир количине (креирати форму)
- Тренутна корпа се не чува у бази. Тек када корисник заврши куповину, корпу чувамо у бази (на неком наредном часу, у виду поруџбина). За сада корпу чувамо преко сесија. Сваки корисник има своју сесију (па је самим тим лако одржавати стање да сваки корисник има своју корпу).
Задатак 2: додати дугме за повратак из корпе, али тако да корисник оде на ону страну коју је претходно гледао
- Пре одласка на списак корпе потребно је запамтити (прецизније проследити) тренутни url.
- Зато се прави још један View Model:
KorpaViewModelкоји има два податка: корпа и url. - Да би покупили исправан url потребно је позвати неколико метода. Лепо објашњење како се креира url може се погледати овде. У фолдеру
Infrastructureкреира се класаUrlExtension. Креирање класе није било неопходно, могли су сви позиви да се обаве и у оквиру Razor странице. Ипак, овакав приступ се сматра добром праксом. - Документација за
HttpRequestкласу (коришћена у оквиру UrlExtension)
Задатак 3: обрисати производ из корпе
- Додати дугме за брисање
Задатак 4: на врху стране додати информације о тренутном стању у корпи
- Ово је део стране, па се као и код навигације користи ViewComponent.
- Додати font-awesome иконицу:
Add --> Client Side Library --> cdnjs --> font-awesome --> Install
Посматрати на даље Prodavnica_poboljsanje
- Може се приметити да се у
KorpaControllerиKorpaViewComponentвише пута појављују методиSetKorpaиGetKorpaи овако понављање кода није добро. - Зато би било добро податке о корпи преузимати на неки другачији начин, коришћењем сервиса.
- Креирати класу која је сервис за корпу.
- У реализацији овог примера интезивно је коришћена техника
Dependency injection. Више о томе може се прочитати у званичној документацији. - Лепо (илустративно) објашњење у разлици између
AddTransient,AddSingletonиAddScoped.