Feladat 2: Beszúrás & módosítás¶
Specifikáció¶
A filmlistából lehessen elnavigálni egy új oldalra (pl. a címre, mint linkre kattintva), ahol a mű adatait szerkeszthetjük. Emellett egy főoldalon lévő külön gombbal/linkkel is ugyanerre az új oldalra lehessen navigálni, de ilyenkor új művet lehessen felvenni.
- A szerkesztés önálló oldalon legyen, a
/Title/{Id:int?}URL-en legyen elérhető! - Az
Idparaméter/tulajdonság tehát URL-ből jön (ha van), és GET kérés hatására is ki kell töltődnie. - Ha
Idnincs megadva, akkor egy üresTitlelétrehozását végezzük. - Ha az
Idmeg van adva, a film adatait töltsd ki az adatbázis adatai alapján! - Használd az
asp-foradatkötést a tulajdonságok megjelenítéséhez! - A mentés ugyanezen URL-en keresztül történjen, viszont POST művelet hatására végződjön el. Mentés után GET kéréssel menjünk vissza az oldal szerkesztő felületére (lásd: PRG).
- Típusból (
TitleType) csak egyet, műfajból többet is meg lehet adni. A felhasználó e kettő adatnál választhasson az értékek közül egy-egy listából. - A műfajok listáját értelemszerűen külön lekérdezésben le kell kérdezni POST és GET esetén is.
Validációk¶
Készíts validációt is az elemekre!
- Jelenítsd meg a validációs hibákat az
asp-validation-summaryTag Helper segítségével! - Mentés csak akkor történhet, ha a validáció sikeres volt (
ModelState.IsValid)! Ha a modell állapota nem valid, a jelenlegi oldal visszaadásával az adatkötések megfelelően lefutnak és kitöltésre kerülnek a validációs hibák, a felületen megadott értékek pedig betöltődnek a megfelelő mezőkbe. - Használhatod a TempData objektumot adat átadására HTTP kérések között.
- Validációk:
- címek: max 500 karakter, kötelező.
- évszámok: 1900 és 2100 között.
- időtartam (perc): 1 és 9999 között.
- Műfajok: maximum 3 db.
Megvalósítás lépései¶
Nem kötelező így csinálni, de egy lehetséges megoldás lépései a következők.
-
Vegyél fel egy új Razor page-et Title névvel a Pages mappába.
-
A razor felület egy lehetséges megvalósítását megtalálod itt. Ezt felhasználhatod, de a kód értelmezése ilyenkor a te feladatod. Nem fog fordulni a kód, lesznek benne nem feloldott hivatkozások az
asp-forattribútumok értékében, illetve aModelobjektum tagjai esetében. Vedd fel a szükséges property-ket és függvényeket aTitleModel-be. A property-k esetében alkalmazd validációval és az adatkötéssel kapcsolatos attribútumokat. Vedd fel azIdproperty-t is, ez GET esetén is töltődjön ki. ASuccessMessageproperty legyen a TempData része. A függvényimplementációk, ha adatbázisadatra van szükségük, használják azIMovieCatalogDataServicefüggvényeit - ehhez előbb DI-ból kell kapnia a page model-nek egyIMovieCatalogDataServicepéldányt. -
Az
OnGetfüggvény, ha azIdki van töltve, töltse fel a property értékeket az adatbázis alapján. -
Valósítsd meg a POST műveletet ezen példa szerint. Az adatbázisművelethez használd most is az
IMovieCatalogDataServicefüggvényét. Állítsd be aSuccessMessage-t is, ha minden sikeresen lefutott. Siker esetén az átirányítás Title oldalra történjen GET művelettel, pl. ha az új/módosított elem azonosítója 5, akkor a /Title/5-re irányíts át. -
Módosítsd az Index oldalt, hogy a filmlistában a film címe linkkel a Title oldalra jussunk mégpedig szerkesztő módban, azaz a film aktuális adataival legyen feltöltve a felület.
-
Adj hozzá az Index oldalhoz egy új link-gombot, ami egyszerűen a Title oldalra linkel, hogy így beszúró módban jelenjen meg a Title oldal.
Végső kinézet¶
Teszt URL:
/Title/5723720

Tippek¶
- Használd az alábbi attribútumokat:
BindProperty,TempData,Display,Required,StringLength,Range,MaxLength! - A
SelectListItemkonstruktorában tudod megadni, hogy ki legyen-e választva egy műfaj. A kiválasztott műfajok azonosítói egyszerűList<int>típusban tárolhatók (és adhatók át a mentést végző metódusnak).
Beadandó tesztesetek¶
- Sikeres beszúrás az
Indexoldalról indulva (a beszúrást indító link URL-je látható a böngészőablak alján). Az új film címe legyen a neptun kódod. - Sikeres módosítás az
Indexoldalról indulva (a módosítást indító link URL-je látható a böngészőablak alján), a műfajbesorolás is változzon. - Sikertelen módosítás validációs hiba miatt.
Következő feladatok¶
- Folytasd a lapozással