Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET) Cserép Máté.

Hasonló dokumentumok
Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET)

Webes alkalmazások fejlesztése 5. előadás. Adatbevitel és validáció (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) Cserép Máté.

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

3. Beadandó feladat dokumentáció

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) Állapotfenntartás. Állapotfenntartás. Állapotfenntartás.

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Models are not right or wrong; they are more or less useful.

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk. Cserép Máté

Weboldalak Biztonsági Kérdései

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Készítette: Gál Tamás. A tananyag programozott változata itt érhető el: Webfejlesztés

WEB PROGRAMOZÁS 3.ELŐADÁS. Űrlapok

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (Entity Framework) Cserép Máté.

Labor leletező program

Webes alkalmazások fejlesztése. Bevezetés az ASP.NET MVC 5 keretrendszerbe

Java és web programozás

PHP-MySQL. Adatbázisok gyakorlat

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla

Internet technológiák

Webes alkalmazások fejlesztése. 9. előadás Bevezetés az ASP.NET MVC keretrendszerbe

1. ábra Fájl feltöltése 2. ábra Megtekintés

1. beadandó feladat dokumentáció

Webes alkalmazások fejlesztése

API tervezése mobil környezetbe. gyakorlat

TÁJÉKOZTATÓ az OTH Szakrendszeri Információs Rendszerbe (OSZIR) történő regisztráció és belépés menetéről belföldi partner nevében

Felhasználói útmutató a portal.nakvi.hu oldalhoz

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET) Webfejlesztés MVC architektúrában Fejlesztés ASP.

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET Core) Cserép Máté

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

JavaServer Pages (JSP) (folytatás)

MŰSZAKI DOKUMENTÁCIÓ. Aleph WebOPAC elérhetővé tétele okostelefonon. Eötvös József Főiskola 6500 Baja, Szegedi út 2.

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET Core) Cserép Máté

Webapp (in)security. Gyakori hibákról és azok kivédéséről fejlesztőknek és üzemeltetőknek egyaránt. Veres-Szentkirályi András

C#---Access adatbáziskezelési gyakorlat

Dokumentumtár A hatósági statisztika adatszolgáltatása lépésről-lépésre

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

HVK Adminisztrátori használati útmutató

Az autorizáció részletes leírása

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET Core) Cserép Máté

Atlon XML interface fejlesztői dokumentáció. Dokumentum verzió: 3.0

Téradatbázisok használata QGIS-ből A DB kezelő modul 2.2 verzió

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Hiba bejelentés azonnal a helyszínről elvégezhető. Egységes bejelentési forma jön létre Követhető, dokumentált folyamat. Regisztráció.

Felhasználói dokumentáció. a TávTagTár programhoz. Készítette: Nyíri Gábor, hdd@nc-studio.com GDF Abakusz regisztrációs kód: GDFAba43

Gyakorlati vizsgatevékenység A

Az Egységes Pályázati Keretrendszer használata (akadémiai könyv- és folyóiratkiadási támogatás elnyerésére a 2014.

Felhasználói dokumentáció a teljesítményadó állományok letöltéséhez v1.0

Tartalomjegyzék 2. RENDSZER FELÉPÍTÉSE... 3

Tájékoztató a szakdolgozat elektronikus feltöltéséről

TÁJÉKOZTATÓ az OTH Szakrendszeri Információs Rendszerbe (OSZIR) történő regisztráció és belépés menetéről külföldi partner nevében

1. fejezet Bevezetés a web programozásába (Balássy György munkája) Az internet működése... 11

FRISSÍTÉSI LEÍRÁS A WINIKSZ PROGRAMCSOMAGHOZ

Gyakorlati vizsgatevékenység B

ASP.NET CORE MVC Model réteg bevezetése Model Binding Repository tervezési minta Dependency Injection Transient és Singleton Custom Binding AutoMapper

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Felhasználói kézikönyv

Technikai információk fejlesztőknek

MOL NYRT - WEB ISA 3.0 FELHASZNÁLÓI KÉZIKÖNYV

Regisztrációs segédlet A roma közösségekben dolgozó védőnők. munkafeltételeinek javítása elnevezésű norvég projekt keretében

Tudás Reflektor. Copyright 2011; Kodácsy Tamás;

SMS küldő központ Leírás

Felhasználói kézikönyv

Webes alkalmazások fejlesztése 6. előadás. Weblapok fejlesztése és architektúrája (ASP.NET)

Programozási technológia

First Voice Kft. Stilldesign Üzletág

Magyar Nemzeti Bank - Elektronikus Rendszer Hitelesített Adatok Fogadásához ERA. Elektronikus aláírás - felhasználói dokumentáció

Webes űrlapok és az XForms ajánlás

C#, OOP. Osztályok tervezése C#-ban

TERC V.I.P. hardverkulcs regisztráció

Swing GUI készítése NetBeans IDE segítségével

BaBér. Bérügyviteli rendszer. Telepítési segédlet 2014.

Vectory telepítési útmutató

az adatbevitel szabályozása, alapok

Felhasználói kézikönyv

Felhasználói kézikönyv

Az importálás folyamata Felhasználói dokumentáció verzió 2.1.

Példa webáruház kialakítás rendszerdokumentáció

KIR-STAT 2017 pedagógus adatok feltöltése KIR SZNY elemi adatok alapján Felhasználói útmutató (v.2)

TAO ELEKTRONIKUS KITÖLTŐ RENDSZER GYAKRAN ISMÉTELT KÉRDÉSEK

Bevezető. Servlet alapgondolatok

OKTATÁSKUTATÓ ÉS FEJLESZTŐ INTÉZET TÁMOP-3.1.5/ Pedagógusképzés támogatása

Új Nemzedék Központ. EFOP pályázatok online beszámoló felülete. Felhasználói útmutató

BEJELENTKEZÉS AZ EPK RENDSZERÉBE

PHP alapjai, bevezetés. Vincze Dávid Miskolci Egyetem, IIT

Felhasználói kézikönyv. Tőkepiaci Közzététel. Magyar Nemzeti Bank

PHP. Adatbázisok gyakorlat

Webshop készítése ASP.NET 3.5 ben I.

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Webes alkalmazások fejlesztése 5. előadás Adatbevitel és validáció (ASP.NET) Cserép Máté mcserep@inf.elte.hu http://mcserep.web.elte.hu Készült Giachetta Roberto jegyzete alapján http://www.inf.elte.hu/karunkrol/digitkonyv/

Űrlapok Sok esetben szükséges, hogy a felhasználó adatokat vigyen fel a weblapokon (pl. felhasználónév/jelszó), ezt űrlapok (form elem) keretében teheti meg az űrlapokban vezérlőket helyezünk el, amelyeknek tartalmát POST típusú kérésben tudjuk a szerverre küldeni űrlapokat a Html.BeginForm művelettel tudunk létrehozni egy @using blokkba helyezzük, ez megadja a hatókörét az űrlapon belül beviteli mezőket (input elemeket) használunk, elküldéséhez pedig egy gombot (submit típusú input elemet) a value attribútummal megadjuk, a modell mely értékeit (tulajdonságait) visszük be ELTE IK, Webes alkalmazások fejlesztése 5:2

Űrlapok pl.: public class UserData { // a nézetmodell típusa } public Int32 UserId { get; set; } // felhasználó azonosítója public String UserName { get; set; } // felhasználónév public String UserPass { get; set; } // jelszó public String Birthdate { get; set; } // születési idő ELTE IK, Webes alkalmazások fejlesztése 5:3

Űrlapok pl.: @model UserData @using (Html.BeginForm()){ // űrlap kezdete <div>your name: <input name="username" value="@model.username" /> @* szövegbeviteli mező, amelyben a modell UserName tulajdonságát állítjuk be *@ </div> @* további adatbekérés *@ <input type="submit" value="login" /> @* űrlap elküldő gomb *@ } // űrlap vége ELTE IK, Webes alkalmazások fejlesztése 5:4

Űrlapok Az űrlapok ugyanúgy egy akciót futtatnak, ám átadják ennek az akciónak a bevitt modell adatokat alapértelmezetten ugyanazt az akciót futtatják, amely létrehozta a nézetüket, de ezt paraméterben megadhatjuk, illetve lehetősünk van átirányításra, pl.: @using (html.beginform("index", "LoginController", )) a vezérlőben megadhatjuk, hogy egy akció csak a GET, vagy POST kérésre hajtódjon végre (HttpGet és HttpPost attribútum), így szétválasztható a két működés attribútumok nélkül egy műveletben kell a két állapotot kezelni (mivel ilyenkor túlterhelés nem engedélyezett) ELTE IK, Webes alkalmazások fejlesztése 5:5

Űrlapok pl.: public class LoginController : Controller { [HttpGet] // ez fut le az oldal betöltésére public ActionResult Index(){ return View(); // itt még csak üresen // prezentáljuk a nézetet } [HttpPost] // ez fut le az űrlap elküldésére public ActionResult Index(UserData data) { // paraméterben megkapjuk az űrlapban // kitöltött modellt } ELTE IK, Webes alkalmazások fejlesztése 5:6

Adatbevitel űrlapokban Az űrlapon belül a beviteli mezőket műveletek segítségével is előállíthatjuk, pl.: @Html.TextBox("userName", "@Model.UserName") Az űrlapon belül a beviteli mezőket (erősen típusos nézetben) egy adott tulajdonságra is generálhatjuk, pl.: @Html.TextBoxFor(m => m.username) A következő beviteli mezőket használhatjuk: szövegdoboz (TextBox), szövegmező (TextArea), jelszómező (Password) kijelölő (CheckBox), rádiógomb (RadioButton), legördülő menü (DropDownList), lista (ListBox) ELTE IK, Webes alkalmazások fejlesztése 5:7

Adatbevitel űrlapokban pl.: @model UserData @using (Html.BeginForm()){ // űrlap kezdete <div>your name: @Html.TextBoxFor(m => m.username)</div> <div>your password: @Html.PasswordFor(m => m.userpass)</div> @* a beviteli mezőket generáljuk a tulajdonságokhoz *@ <input type="submit" value="login" /> } // űrlap vége ELTE IK, Webes alkalmazások fejlesztése 5:8

Adatbevitel űrlapokban Amennyiben nem ismerjük előre a modelltulajdonság típusát, használhatunk dinamikusan generált elemeket: az Editor művelet dinamikusan generálja a beviteli mezőt a Label művelet címkét hoz létre a megadott tulajdonsághoz, míg a Display csak olvasható módon jeleníti meg a tartalmat Amennyiben nem egyenként szeretnénk bekérni a tartalmat, a teljes nézetmodell összes adatát megjeleníthetjük (LabelForModel, DisplayForModel), vagy szerkeszthetjük (EditorForModel) ekkor célszerű annotációkkal felruházni a nézetmodellt ELTE IK, Webes alkalmazások fejlesztése 5:9

Adatbevitel űrlapokban pl.: @model UserData // felhasználói adatok @using (Html.BeginForm()){ // űrlap kezdete <div>@html.labelfor(m => m.username): @Html.EditorFor(m => m.username)</div> @* a szerkesztő és a címke is dinamikus *@ <div>@html.labelfor(m => m.birthdate): @Html.EditorFor(m => m.birthdate)</div> @* itt egy dátumbekérő fog megjelenni *@ <input type="submit" value="login" /> } // űrlap vége ELTE IK, Webes alkalmazások fejlesztése 5:10

Adatbevitel űrlapokban pl.: @model UserData // felhasználói adatok @using (Html.BeginForm()){ // űrlap kezdete @Html.EditorForModel() @* a teljes modelltartalmat szerkeszthetővé tesszük *@ <input type="submit" value="login" /> @* már csak a bejelentkező gombra van szükség *@ } // űrlap vége ELTE IK, Webes alkalmazások fejlesztése 5:11

Űrlapok modelljei A nézetmodellünket, és annak tulajdonságait számos annotiációval (attribútummal) megjelölhetjük, amelyek az űrlapmezők dinamikus generálását befolyásolják így a generáláskor jobban szabályozhatjuk az adatok megjelenítésének/bekérésének módját pl.: megjelenő címke (Display), illetve tartalom megjelenés formátuma (DisplayFormat) elrejtés (HiddenInput) specifikusabb adattípus (DataType), illetve beviteli mező specifikálása (UIHint) ELTE IK, Webes alkalmazások fejlesztése 5:12

Űrlapok modelljei pl.: [DisplayName("User login:")] // megadjuk a bekérő lapnak a címszövegét public class UserData { [HiddenInput(DisplayValue=false)] // ez a mező rejtett lesz, így nem // jelenik meg public Int32 UserId { get; set; } // azonosító [Display(Name="Your name:")] // a címkén a megadott szöveg jelenik meg public String UserName { get; set; } // felhasználónév ELTE IK, Webes alkalmazások fejlesztése 5:13

Űrlapok modelljei [Display(Name="Your password:")] [UIHint("Password")] // a szerkesztőmező egy jelszómező lesz public String UserPass { get; set; } // jelszó } [Display(Name="Your birthday:")] [DisplayFormat(DataStringFormat="yy.MM.dd")] [DataType(DataType.Date)] // csak a dátum fog megjelenni, a megadott // formátumban public DateTime Birthdate { get; set; } // születési dátum ELTE IK, Webes alkalmazások fejlesztése 5:14

Megjelenítő sablonok Megjelenítő (DisplayFor), illetve beviteli (EditorFor) mezőnek nem csak beépített elemeket, hanem általunk létrehozott parciális nézeteket is használhatunk, mint sablonokat (display template) ezeket a Views/Shared/DisplayTemplate könyvtárba helyezzük a tulajdonság ennek a nézetnek a modellje lesz pl.: [Display(Name="Your name:")] [UIHint("MyNameDisplay")] // a MyNameDisplay.cshtml nézetet tölti be public String UserName { get; set; } ELTE IK, Webes alkalmazások fejlesztése 5:15

Validáció A felhasználótól bekért adatokat mindig ellenőriznünk kell, ez a modell validációja, amely a következő lépésekből áll: 1. a kliens oldalon, amint a felhasználó elküldi az űrlapot: ellenőrizzük, hogy a szükséges adatokat megadták ellenőrizzük, hogy a típusa és formátumuk helyes (pl. e- mail, dátum) jelezzük a felhasználónak, ha bármilyen probléma van 2. sikeres ellenőrzés esetén az adatok a szerverre kerülnek 3. a szerver oldalon ismét lefutnak az ellenőrzések, immár biztonsági ellenőrzéseket is futtatva 4. hiba esetén visszajelzünk a kliensnek, egyébként mentünk ELTE IK, Webes alkalmazások fejlesztése 5:16

Validáció kliens űrlap kitöltés szerver adat ellenőrzés sikeres űrlap ellenőrzés hibajelzés sikertelen sikeres sikertelen adat mentés ELTE IK, Webes alkalmazások fejlesztése 5:17

Validáció A validáció elvégezhető csak szerver oldalon, vagy kliens és szerver oldalon a szerver oldali ellenőrzés mindenképpen szükséges, főleg támadások kivédése miatt a validálás elvégezhető teljesen manuálisan, vagy használhatóak beépített eszközök Szerver oldalon a modell állapotát a vezérlőben a ModelState tulajdonságon keresztül tudjuk kezelni az IsValid érték megadja, hogy minden szükséges érték megtalálható, és típusa megfelelő az AddModelError művelettel jelezhetünk egy hibát ELTE IK, Webes alkalmazások fejlesztése 5:18

Validáció pl.: public class LoginController : Controller { [HttpPost] public ActionResult Index(UserData data) { if (String.IsNullOrEmpty(data.UserName)) // ha üresen hagyták a nevet ModelState.AddModelError("UserName", "User name is required!"); // jelezzük a hibát a tulajdonságra if (ModelState.IsValid) // ha egyébként jók az adatok } ELTE IK, Webes alkalmazások fejlesztése 5:19

Validáció a nézetben A hibákat globálisan, vagy az egyes tulajdonságokra egyenként is megadhatjuk (előbbi esetben nem adjuk meg a tulajdonságot) A nézetben a hibajelzéseket jelezhetjük egy tulajdonságra a Html.ValidationMessageFor művelet írja ki a jelzett hibaüzenetet a teljes modellre Html.ValidationSummary művelet írja ki a hibaüzeneteket paraméterben megadhatjuk, hogy az egyes tulajdonságok hibáit is kiírja, vagy csak azokat, amelyekhez nem adtunk meg tulajdonságot (Html.ValidationSummary(true)) ELTE IK, Webes alkalmazások fejlesztése 5:20

Validáció a nézetben pl.: @using (Html.BeginForm()){ <div> @Html.ValidationSummary(true, "Errors:") @* a globálisan jelzett hibák *@ </div> <div> @Html.LabelFor(m => m.username): @Html.EditorFor(m => m.username) @Html.ValidationMessageFor(m => m.username) @* a UserName-re jelzett hiba *@ </div> ELTE IK, Webes alkalmazások fejlesztése 5:21

Validáció a nézetmodellben Lehetőségünk van a nézetmodellen közvetlenül megadni ellenőrzési kritériumokat, automatizálva az ellenőrzést a feltételeket tulajdonságonként szabályozhatjuk, és megadhatjuk a hibaüzenetet (ErrorMessage) megadhatjuk a kötelező kitöltést (Required), szöveghosszt (StringLength), reguláris kifejezést (RegularExpression), intervallumot (Range), összehasonlítást más tulajdonsággal (Compare), illetve speciális formátumot (Url, Phone, CreditCard, EmailAddress, ) a Validation osztály TryValidateObject metódusával az ellenőrzés elvégezhető manuálisan is ELTE IK, Webes alkalmazások fejlesztése 5:22

Validáció a nézetmodellben pl.: public class UserData { [Required(ErrorMessage="User name is required.")] [StringLength(15, "User name cannot be longer, than 15 characters.")] [RegularExpression("^[a-z0-9_-]{3,15}$", "User name has invalid characters.")] // feltételek a felhasználónévre public String UserName { get; set; } // felhasználónév } ELTE IK, Webes alkalmazások fejlesztése 5:23

Kliens oldali validáció A kliens oldali validációt Javascript segítségével végezzük a legegyszerűbb a jquery Validation programcsomag használata, amely automatikusan kezelni tudja a szerver oldali modellben lévő annotációkat, pl.: <script src="jquery-2.1.3.min.js"> <script src="jquery.validate.js"> <script src="jquery.validate.unobtrusive.js"> a validáció az űrlap beküldése előtt, még kliens oldalon megtörténik (voltaképpen az annotációk megfelelő módon beépülnek a HTML vezérlőkbe) ELTE IK, Webes alkalmazások fejlesztése 5:24

Biztonsági ellenőrzések A felhasználó által felvitt adatok kártékony információkat is tartalmazhatnak, ezért biztonsági szempontból is fontos a validálás, a legjellemzőbb támadások: SQL injekció: a szerveren futó SQL utasításokat manipulálja entitásmodell használata esetén nem fordulhat elő cross-site scripting (XSS): szkript kerül feltöltésre a szerverre, amelyet a kliens böngészője futtat a bevitel eleve tiltja a HTML elemeket tartalmazó adatok feldolgozását, de ez kikapcsolható (ValidateInput) az adatok tartalmát megjelenítéskor a Html.Encode utasítással kódolhatjuk, így biztosan nem kerül értelmezésre a szkript ELTE IK, Webes alkalmazások fejlesztése 5:25

Biztonsági ellenőrzések cross-site request forgery (XSRF): a felhasználó átirányítása, és egy kérés végrehajtása a tudta nélkül a felhasználó elküldi az űrlapot tartalommal (POST), anélkül, hogy megadta volna adatait ez elkerülhető, ha megbizonyosodunk róla, hogy a kitöltést és a küldést is ugyanazon kliens végezte ehhez az űrlapban elhelyezünk egy tokent (Html.AntiForgeryToken()), amely információkat közöl a klienssel az akció végrehajtásakor lekérhetjük a tokent (ValidateAntiForgeryToken attribútum), ha a két érték egyezik, akkor nem volt támadás ELTE IK, Webes alkalmazások fejlesztése 5:26

Példa Feladat: Valósítsuk meg az utazási ügynökség weblapjának foglalási funkcióját, azaz egy apartmant kiválasztva legyen lehetőség a foglaló adatival adott hetekre lefoglalni. felveszünk egy új vezérlőt, amely a foglalásokat felügyeli (RentController), a vezérlőben az Index művelet szolgálja ki a GET és POST kéréseket (paramétere az apartman, illetve utóbbinak a megadott adatok) A vezérlőhöz két nézetet veszünk fel: egyikben űrlapban megadjuk az adatokat (Index) egy másikban visszajelezzük, hogy sikeres volt a foglalás (Result), és megadjuk a teljes összeget ELTE IK, Webes alkalmazások fejlesztése 5:27

Példa a foglalás és a foglaló adatait az adatbázisban két külön táblában tároljuk (Rent, Guest) kiegészítjük az entitásmodell osztályait kényelmi funkciókkal (Rent típust az ütközésdetektálással, Apartment típust a hét napjának lekérdezésével) az adatokat egyszerre szeretnénk bekérni, így létrehozunk egy nézetmodell osztályt (RentViewModel) a megjelenítéshez és validációhoz annotációkat használunk a RentViewModel osztályban minden megadott adatot ellenőrzünk, mielőtt mentenénk, amíg nem hibátlan a kitöltés, visszairányítjuk a kitöltő oldalra (és megjelenítünk egy hibaüzenetet is) ELTE IK, Webes alkalmazások fejlesztése 5:28

Példa elvégezzük kliens oldalon is a validációt, a dátum ellenőrzéséhez használjuk a nemzetközi csomagot (_Layout.cshtml) az aktuális nyelvi beállítást elkérhetjük a nézettől (Culture tulajdonság) az XSRF támadások ellen is védjük az oldalt a megfelelő helyeken (Rent/Index.cshtml, RentController) a hét napja, illetve a tengerpart típusa speciális megjelenítést igényelnek több oldalon, ezért egy-egy parciális nézetet (DayOfWeekDisplay, ShoreTypeDisplay), definiálunk és használunk ezek a megjelenítésére ehhez a megfelelő entitásosztályokat is kiegészítjük ELTE IK, Webes alkalmazások fejlesztése 5:29

Példa Tervezés (adatbázis): ELTE IK, Webes alkalmazások fejlesztése 5:30

Példa Tervezés (alkalmazás): Controller Controllers::RentController - _entities :TravelAgencyEntities View Rent::Result View Rent::Index + Index(Int32?) :ActionResult + Index(Int32?, RentViewModel) :ActionResult + RentController() Models::RentViewModel «property» + Apartment() :Apartment + GuestAddress() :String + GuestEmail() :String + GuestName() :String + GuestPhoneNumber() :String + RentEndDate() :DateTime + RentStartDate() :DateTime + TotalPrice() :Int32 Controller Controllers::HomeController - _entities :TravelAgencyEntities + Details(Int32?) :ActionResult + HomeController() + Image(Int32?, Boolean) :FileResult + ImageForBuilding(Int32?) :FileResult + Index() :ActionResult + List(Int32?) :ActionResult View Home::Details View Home::Index ELTE IK, Webes alkalmazások fejlesztése 5:31

Példa Feladat: Valósítsuk meg az utazási ügynökség weblapjának foglalási funkcióját, azaz egy apartmant kiválasztva legyen lehetőség a foglaló adatival adott hetekre lefoglalni. a vezérlőkben található üzleti logikát célszerű kihelyezni külön osztályba, legyen ez a TravelService biztosítja a kapcsolatot a perzisztenciával, az adatok lekérdezését, a foglalás végrehajtását az adatok ellenőrzését is elvégzi, a műveletek logikai értékkel, vagy hibakóddal térnek vissza (pl. RentDateError) egy segédosztály (RentDateValidator) ellenőrzi a dátumokat ELTE IK, Webes alkalmazások fejlesztése 5:32

Példa Tervezés (alkalmazás): Controller Controllers::RentController - _travelservice :ITravelService + Index(Int32?) :ActionResult + Index(Int32?, RentViewModel) :ActionResult + RentController() «enumeration» Models:: RentDateError None StartInvalid EndInvalid LengthInvalid Conflicting -_travelservice «interface» Models::ITravelService + GetApartment(Int32?) :Apartment + GetBuilding(Int32?) :Building + GetBuildingImage(Int32?, Boolean) :Byte[] + GetBuildingImageIds(Int32?) :IEnumerable<Int32> + GetBuildingMainImage(Int32?) :Byte[] + GetBuildings(Int32?) :IEnumerable<Building> + GetBuildingWithApartments(Int32?) :Building + GetPrice(Int32?, RentViewModel) :Int32 + NewRent(Int32?) :RentViewModel + SaveRent(Int32?, RentViewModel) :Boolean «property» + Buildings() :IEnumerable<Building> + Cities() :IEnumerable<City> Models::TravelService - _entities :TravelAgencyEntities Models::RentDateValidator + Validate(DateTime, DateTime, Int32) :RentDateError -_entities DbContext Models::TravelAgencyEntities ELTE IK, Webes alkalmazások fejlesztése 5:33