ASP.NET CORE MVC View helperek Hiba oldalak Kivételkezelés Model validáció Naplózás
Hallgatói tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik. Ismeretük szükséges, de nem elégséges feltétele a sikeres zárthelyinek, illetve vizsgának. Sikeres zárthelyihez, illetve vizsgához a jelen bemutató tartalmán felül a kötelező irodalomként megjelölt anyag, a gyakorlatokon szóban, illetve a táblán átadott tudnivalók ismerete, valamint a gyakorlatokon megoldott példák és az otthoni feldolgozás céljából kiadott feladatok önálló megoldásának képessége is szükséges.
HTML helper A HTML kód + C# kód bonyolult összekapcsolása helyett: Rendelkezésünkre állnak beépített függvények, amelyek HTML kódot generálnak ActionLink Helper Jelenleg így gyártunk linkeket <a href="/home/delete/?hashcode=@item.gethashcode()">törlés</a> Ugyanezt generálhatjuk C# kóddal is @Html.ActionLink("Törlés", "Delete", new { hashcode = item.gethashcode() }) Paramétereket egy névtelen osztály segítségével hozunk létre Továbbá a Controller nevét nem kell a kódba beégetni 3
FORM helper @using (Html.BeginForm()) { <p> @Html.LabelFor(x => x.name) @Html.EditorFor(x => x.name) </p> <p> @Html.LabelFor(x => x.job) @Html.EditorFor(x => x.job) </p> <p> @Html.LabelFor(x => x.salary) @Html.EditorFor(x => x.salary) </p> <input type="submit" value="felvétel" /> } 4
Megjelenő felirat Előző példánkban az űrlapelemek feliratai a Property nevek lettek. Felüldefiniálás a modellen Data Annotation attribútummal: 5
Egyéb adatátvitel a Controller -> View között Kellene valamilyen segédadat Környezetfüggő sugószöveg, címsor, gombfelirat ViewModel kikerülhető vele valamennyire ViewData, ViewBag Dictionary 6
Hibaoldalak A HTTP protokoll számos státuszkódot definiál Bővebben: https://en.wikipedia.org/wiki/list_of_http_status_codes Leggyakoribb az Error 404 (Page not found) Lehetőség van viszont helyette saját hibaoldalt dobni 7
Saját hibaoldal Módosítjuk a Startup.cs-t Hogyha hibakód van, átadjuk egy saját Controllernek Error lesz a Controller, StatusPage az Action, code a GET paraméter 8
Saját hibaoldal Megírjuk az Error Controllert Létrehozunk hozzá egy View-t, ahol csak kiírjuk a kódot (vagy nyilván bármilyen szöveget a kód helyett) 9
Saját hibaoldal (több infó) Megírjuk az Error Controllert Létrehozunk hozzá egy View-t, ahol ViewData-ból kiírunk mindent 10
Hibakód dobása catch-ből Lekezelünk egy kivételt, és visszatérünk egy hibakóddal Teljesen mindegy milyen kóddal 11
Exception Filters Hogyha az alkalmazásban kivétel dobódik, lehetőség van elkapni egy Filter osztályban és valamilyen Action-höz továbbítani Új mappa: Filters -> új osztály: MyExceptionFilter.cs 12
Exception Filters Felhasználjuk szinte bárhol: Osztályon, Action-ön Az ErrorController megfelelő Action-je 13
Model Validation Törekednünk kell a helytelen felhasználói inputokra Szerveroldali ellenőrzés: Modellen validáló attribútumokkal Majd kliensoldalra objektum és hibaobjektum visszaküldése Kliensoldali ellenőrzés: Javascript kód/html5 lehetőségek Nem biztonságos, megkerülhető 14
Model Validation A Model Property-ken jelezzük attribútummal Lehetséges validációk: Required, Compare, EmailAddress, Phone, Range, StringLength, Url, RegularExpression 15
Model Validation Controlleren lekérdezzük a validáció eredményét Ha a modelünk nem valid, akkor konvenció szerint visszaküldjük a View-nak DE! Ilyenkor a validálás eredménye is megy vele 16
Validációs üzenet a View-n View-n két elérési mód Minden űrlapelemre vonatkozóan kollektíven a form elején Minden űrlapmező mellett (adott elemre vonatkozóan) 17
Validációs üzenet a View-n Validációs üzenetek a View-n Kollektíven is, és mezők mellett is Probléma: Ezek az üzenetek nem magyarul vannak, és amúgy is jó lenne saját validációt is írni Pl: a név csak két részből állhasson 18
Saját validáció írása Új mappa: ViewModels/Validation Új osztály: NamePieceValidationAttribute 19
Felhasználás + eredmény Modelen jelezzük 20
Saját paraméteres validáció írása Adhassuk meg az attribútumon, hogy hány tagból állhat a név! Konstruktoron át bekérjük 21