You are on page 1of 82

Web Programiranje

dr Siniša Nikolić

ASP.NET MVC
ASP.NET frejmwork
• Različite modeli za razvoj veb aplikacija.
– ASP.NET Web Forms
– ASP.NET Web Pages
– ASP.NET MVC

– ASP.NET WebAPI
• React.js
• Vue.js
• https://docs.microsoft.com/en-us/aspnet/overview
jQuery
• Angular.js
https://www.simform.com/best-frontend-frameworks/
2/86
ASP.NET frejmwork

3/86
ASP.NET Web Forms
• Za kreiranje web sajtova
• Koristi ASPX engine za prikaz i generisanje
dinamičkog sadržaja stranica
• Elementi HTML stranica su komponente koje su
povezane sa kodom koji se izvršava na serveru.
• Generisanje sadržaja je server-side.
• Postepen prelazak sa razvoja desktop aplikacija
na web platformu

4/86
ASP.NET Web Forms
• Stranica koja sadrži web kontrole, prezentaciju i
biznis logiku. Sadrži html tagove, asp tagove
(npr. <asp:TextBox runat="server"
ID="TextInput"></asp:TextBox>) i C# kod. Oslanja se
na .aspx.cs fajlove za kontrolu (code behind
files).
• ASP.NET Web Forms nije ušao kao deo novog
ASP.NET Core.

5/86
ASP.NET Web Forms
• Prednosti:
– zadržava isti (komponentarni) koncept razvoja
softvera, gde je akcenat na obradi događaja,
jer je cilj bio postepen prelazak programera sa
razvoja desktop aplikacija na web platformu
– uz minimalnu nadogradnju znanja, programeri
koji su već razvijali dekstop aplikacije su bili u
stanju da „sa lakoćom“ nastave razvoj web
aplikacija

6/86
ASP.NET Web Forms
• Mane:
– zadržava isti (komponentarni) koncept razvoja
softvera, gde je akcenat na obradi događaja. Ovo
odstupa od standarda za razvoj web aplikacija
gde se ne obrađuju događaji nego HTTP zahtevi
– koristi ASPX engine za prikaz i generisanje
dinamičkog sadržaja (manje intuitivan,
opterećuje prikazani sadržaj)
– spoljni korisnici (aplikacije) putem HTTP
protokola ne mogu da iniciraju akcije na
WebForms aplikaciji
7/86
ASP.NET Web Forms
ASP.NET Web Forms
ASP.NET Web Forms
• Inicijalni prikaz

• Popunjavanje podatak pa klik

• Posle klika

ASPX_WF/HelloWF.aspx 10/86
ASP.NET Web Pages
• lagan frejmvork za kreiranje dinamičkih web
stranica i web sajtova
• Platforma koja koristi samo stranice
napisane po Razor sintaksi (ASP.NET
Razor)
• U HTML se ugrađuju dinamički elementi (C#
- kod) preko specijalnih oznaka koje počinju
'@' karakterom.
• ASP.NET Web Pages je ušao kao deo
novog ASP.NET Core. 11/86
ASP.NET Web Pages
• Veb aplikacija se sastoji iz povezanih .cshtml
stranica (samo prezentacijski sloj view od mvc).
• Prezentacija i kontrola su ugrađeni u .cshtml
stranice
– podaci su modelirani upotrebom C# klasa iz Models
foldera
• Prelazak na sledeću stranicu je određen:
– klikom po hiperlinku
– pritiskom na dugme Submit
– i jedno i drugo "gađa" .cshtml stranicu
12/86
ASP.NET Web Pages
• Workflow
– Kada neko zatraži određenu .cshtml stranicu u burazeru,
ASP.NET pronalazi i pribavlja stranicu dok se još ona
nalazi na serveru.
– ASP.NET započinje procesiranje .cshtml stranice i
uključuje u postojeću stranicu dinamički generisan HTML
kod koji je nastao kao rezultat rada C# programskog
koda (ako postoji). Sve se ovo odvija na serveru.
– Kada se završi procesiranje stanice, ASP.NET šalje
brauzeru rezultujuću stranicu. U ovom trenutku brauzer
dobija samo HTML (nema C# koda).

13/86
ASP.NET Web Pages

https://docs.microsoft.com/en-us/aspnet/web-pages/overview/getting-started/introducing-aspnet-web-pages-2/getting-started 14/86
ASP.NET Web Pages

15/86
ASP.NET Web Pages
• Prednosti:
– lak za učenje, razumevanje i korišćenje
– optimizovana sintaksa za generisanje HTML
stranica
– stranice se generišu oslanjajući se na code-
focused templating approach, sa minimalnom
tranzicijom između HTML i C# koda
• Mane:
– podstiče špageti-kod u stranicama
– odabir stranice za prikaz je unutar izraza
– pronalaženje i ispravljanje grešaka može biti teško
16/86
ASP.NET MVC
• Za kreiranje web aplikacija
• ASP.NET MVC je ušao kao deo novog ASP.NET
Core.
• Bazira se na MVC šablonu (Model View Controller)
– Cilj šablona je da razdvoji prikaz informacija od obrade
korisničkih interakcija
• Web aplikacija se struktuira na 3 logičke
celine:
– M – model (apstraktovan model u odnosu na
realan svet, pomoću kojeg smo u stanju da
napravimo simulacioni sistem - aplikaciju)
17/86
ASP.NET MVC
– C – controller (kontroler predstavlja aplikacioni
sloj, čija je uloga da obrađuje korisničke
interakcije, i u zavisnosti od njih, po potrebi
prikazuje odgovarajući sadržaj)
– V – view (prezentacioni sloj aplikacije, tj. deo
aplikacije koji je isključivo zadužen za prikaz UI
krajnjem korisniku tj. omogućuje prezentaciju
podatka iz modela na određen način)

18/86
Model Controller View
(MVC)
• Univerzalan šablon (ne koristi se samo u
web aplikacijama)
• Design pattern koji se zasniva na
sinhronom radu tri komponente:
– Model
– View
View
– Controller
Model Controller
19/86
Model
• Realizovan kroz klase iz foldera Models.
• Opisuje biznis logiku
• Sadrži:
– sve potrebne podatke koji se koriste u aplikaciji
bez obzira kako su dobijeni
– može da sadrži podatke dobijene, na primer, iz
baze podataka
• Podaci su nezavisni od prezentacije.

20/86
View
• Predstavlja prezentacioni sloj.
• Vizualizuje podatke iz modela
– dobijene od kontrolera
• Nije svestan porekla podataka (za to je
zaslužan model).

21/86
Controller
• Obezbeđuje vezu između korisnika i
podataka
– upravlja prezentacionim slojem i slojem
podataka (modelom),
– upravlja tokom izvršenja aplikacije
• svi zahtevi (akcije korisnika) idu preko kontrolera, a
on donosi odluku koji segment aplikacije će biti
prikazan.

22/86
Model View Controller
• Prednosti: (MVC)
– kada se poštuje MVC šablon u razvoju aplikacije, dosta je
jednostavnije pronaći određene funkcionalnosti u kodu, jer
ih grupišemo po semantičkoj pripadnosti (tipa razvoj nove
funkcionalnosti, rešavanje bug-ova)
– podela poslova:
• View: manje opterećenje prikaznih modula sa C# kodom koji se tiče
poslovne logike, olakšava rad developerima zaduženim za dizajn
• Model: razvojem modela se sada mogu baviti isključivo projektanti
baza podataka
– objedinjavanjem eksperta iz različitih oblasti (view, model,
controller) može se dobiti visokokvalitetan proizvod

23/86
Model Controller View
• Mane: (MVC)
– Zahteva mali dodatan napor i veći stepen složenosti,
prilikom razvoja aplikacija (razdvajanje koncepta na prikaz,
model i integraciju pomenutih putem kontrolera)
– potrebno kadrovsko znanje iz različitih oblasti (dizajn, baze
podataka,…)
– slabija podrška za upotrebu aktuelnih frejmworka za SPA
(single page application) korisnički interfejs (angular.js)

24/86
MVC u ASP.NET web aplikacijama
• Razdvaja model, prezentaciju i kontrolu
• Bolje upravlja tokom prezentacije
– omogućuje lakši prikaz različitih stranica u zavisnosti
od ulaznih podataka
• Posebne C# klase obavljaju posao kontrolera
– upravljaju stanjem web aplikacije
– određuju stranicu za prikaz vraćanjem odgovarajućeg
ViewResult objekta
• Klase u folderu Models modeliraju podatke.

25/86
ASP.NET MVC

ASP-MVC-Uvod 26/86
ASP.NET MVC 5
• Od ASP.NET MVC 5 cshtml stranice su
prezentacioni sloj.
• Umesto ASPX prikaznog modula, koristi Razor
koji je daleko intuitivniji i lakši za upotrebu
• Način na koji je ASP.NET MVC koncept
implementiran pruža izuzetno veliku
fleksibilnost i skalabilost.

27/86
ASP.NET MVC 5
• Vodi se logikom convention over configuration
(coding by convention)
– is a term that when a convention, or code pattern, is
implemented by a tool to match the desired behavior,
it behaves as expected without the use of any
configuration files.
– This makes your coding easier when you know the
conventions of where everything is located and you
place each component into it's correct location.

https://www.danylkoweb.com/Blog/aspnet-mvc-convention-over-configuration-BU

28/86
Struktura projekta
• Zadržava standardnu strukturu .NET web
projekta
– App_Start – sadrži konfiguracione klase
(RouteConfig.cs, BoundleConfig.cs,
FilterConfig.cs) čija je uloga da definiše ponašanje
aplikacije na globalnom nivou. Tu se inicijalizuje
RouteController, odn. rutiranje za našu aplikaciju.
Definiše se način na koji se URL razbija na delove,
i kako se iz tih delova određuje kontroler i poziv
funkcija u njemu.

29/86
Struktura projekta
• App_Data – sadrži podatke, datoteke koje se koriste od
strane web aplikacije. Sve otpremljene (uploaded)
datoteke se smeštaju u ovaj folder.
• Content – sadrži datoteke poput slika (*.jpg, *.png,
*.svg,..), definicije stilova *.css i slično…
• fonts - sadrži sve font datoteke
• Scripts – sadrži JavaScript datoteke
• Models – klase koje predstavljaju model
• Controllers – klase koje realizuju kontroler
• Views – folderi i *.cshtml i *.html stranice (prikazne
datoteke) koje realizuju pogled.

30/86
Struktura projekta
• Global.asax – opciona datoteka, gde na aplikacionom nivou i nivou sesije
možemo da obrađujemo odgovarajuće događaje, takođe služi za
inicijalizaciju aplikacije
• package.config – spisak svih neophodnih biblioteka za implementaciju
web aplikacije. Biblioteke se integrišu u rešenje putem NuGet package
manager-a.
• Web.config – globalna konfiguraciona datoteka za podešavanje ponašanja
celokupne .NET aplikacije

31/86
Scenario upotrebe MVC tehnologije
Workflow
• Kontroler obrađuje HTTP zahteve
– kontroler čita zahteve, proverava validnost parametara, ...
• Kontroler inicira obradu podataka
– rezultati se smeštaju u model (objekte iz foldera Models)
– objekti iz modela se smeštaju u ViewBag, Session ili
Cache (a mogu se koristiti i drugi ViewData, TempData,..).
• Kontroler aktivira prezentacioni sloj tako što vrati
odgovarajući View().
• Prezentacioni sloj preuzima podatke iz modela i
prikazuje ih.

32/86
Rutiranje – RouteConfig.cs
• pristup kontrolerima putem URL.
• parsirajući HTTP zahtev, asp.net parsira putanju ka resursu u
zavisnosti od predefinisanog načina rutiranja u RouteConfig.cs.

http://mojsajt.com/studenti/search/64
• Parametri označeni sa {} zagradama su opcioni, ali sa levim
prioritetom, što znači da ako želimo da izostavimo {action}
moramo navesti {controller}, da bi izostavili {id} moramo navesti
{action} 33/86
Rutiranje – RouteConfig.cs
• Budući da u frejmwork-u već postoje predefinisani resursi
ScriptResource.adx i WebResources.adx koji služe za
obradu HTTP zahteva, i budući da oni predstavljaju internu
implementaciju, poželjno je zabraniti pristup ka njima, tj.
ignorisati rute.

34/86
Rutiranje – RouteConfig.cs
• url paterni za definisanje ruta

35/86
Rutiranje – RouteConfig.cs
• Moguće je definisati više mapiranja za URL putanje

36/86
RouteConfig-cs, Controllers/NekiController, http://localhost/NekaPutanja

Rutiranje – RouteConfig.cs
• Moguće je definisati više mapiranja za URL putanje

37/86
Kontroler - Controller
• Kontroler predstavlja aplikacioni sloj
– uloga da obrađuje korisničke interakcije, i u zavisnosti od njih,
po potrebi da prikaže odgovarajući sadržaj
• Svaki kontroler:
– se može adresirati putem URL putanje
– obavezno poseduje sufiks tj. nastavak
reč Controller
– obavezno nasleđuje baznu
klasu Controller
• metode kontrolera nazivamo akcijama (primer. akcija
Index u kontroleru Home)
– ukoliko želimo da akcija bude adresibilna putem URL,
obavezno se mora deklarisati sa public modifikatorom
pristupa 38/86
Kontroler - Controller
– private metode u kontroleru se nazivaju i helper metodama, i
one nisu adresibilne putem URL-a, koriste se interno
– za public metoda u kontroleru koja treba da bude samo helper
metoda, mora da se postovi [NonAction] tag
• Tok obrade zahteva - flow control:
– HTTP request se parsira i url se razdvaja po segmentima:
• /Home/Index
– prvi segment je ime kontrolera, drugi segment je akcije
– poziva se akcija određenog kontrolera
• Podela po segmentima je podešena u
App_Start/RouteConfig klasi
– podrazumevani kontroler je Home
• pristup akcijama putem URL
– nije case sensitive
– podrazumevana akcija za svaki kontroler je Index (moguće je
promeniti u App_Start/RouteConfig.cs) 39/86
Controllers/HomeController

Kontroler - Controller
• pristup akciji Index putem URL
– http://localhost/ASP-MVC-Uvod/Home/Index
– http://localhost/ASP-MVC-Uvod/home/index
– http://localhost/ASP-MVC-Uvod/home
– http://localhost/ASP-MVC-Uvod/Home/NijeAkcija
– http://localhost/ASP-MVC-Uvod/Home/NijeAkcija2

40/86
Kontroler - Controller
• akcije mogu da imaju različite
povratne vrednosti. Bazna
klasa za sve njih je
ActionResult.
– Tekst
– Sadržaj fajla
– ne vraća rezultat
– pogled
– …

41/86
Kontroler - Controller
• Kada funkcija u kontroleru vraća pogled View() ili
View(ime_strane) tada tok obrade zahteva - flow
control
– završava na stranici
Views/<ime_kontrolera>/<ime_funkcije>.cshtml
– ako vrati View("Pera"), završava na
Views/<ime_kontrolera>/Pera.cshtml

42/86
Kontroler - Controller

43/86
Kontroler - Controller
• Bazna klasa Controller, pruža relevantne metode kao i
objekte za lakšu obradu i upravljanje HTTP
zahtevom/odgovorom
• Korisni objekti za pristup URL promenljivama
nezavisno od HTTP metode:
– RouteData.Values – vraća kolekciju vrednosti poslatih parametara
– Request.Params – vraća kolekciju tipa ključ-vrednost poslatih
parametara
– Request[“ključ”] – vraća vrednost parametara za zadatu vrednost ključa
– Request.Form - vraća kolekciju tipa ključ-vrednost poslatih parametara
forme, samo za POST metodu
– Request.RawUrl – vraća puno vrednost URL-a trenutno posmatrane
stranice
• Pomoću metode RediractToAction(…) u stanju smo da
manuelno pokrenemo izvršavanje neke druge akcije kontrolera

44/86
Model
• Služi da opiše podatke (entitete) koji su korišćeni u
simulaciji realnog sveta
• U osnovi modeli su biznis kontejneri specificirani za
dati domen. Korite se zarad potrebe manipulacije
podacima radi implementacije određene biznis logike.
• Interakcija sa bazom podataka ide preko modela.
• Kada se podacima rukuje oslanjajući se na model
podataka tada je moguće koristiti dodatne alate koji
imaju ulogu za povezivanje modela i baze podataka
tipa entity framework
• Reprezentacije modela se veoma lako mogu presipati
iz jednog formata u drugi tip tj. iz interne
reprezentacije u drugi tip C# objekta, u JSON, XML
notaciju ili obrnuto
45/86
Model i Data annotation
• Prilikom definisanja modela mogu da se koriste
anotacije koje nazivamo Data annotations
• U C# anotacije:
– Imaju opšti oblik [NazivAnotacije(parametri)]
– Predstavljaju mehanizam za kreiranje metapodataka o
klasama
– Anotacije se još nazivaju i atributi
– Navode se iznad atributa klase

• npr. Required, StringLength, RegularExpression, Range, …

46/86
Model i Data validation
• .NET MVC pruža odlične sisteme validacije koji se
definišu na nivou modela i koji se oslanjaju na data
anotacije za atribute klase
• Validacijom podataka utvrđujemo da li je korisnik
poslao očekivane podatke
– Validacija na serverskoj strani je obavezna!
– Izostavljanje provere ulaznih podataka može dovesti do
prestanka rada programa!
• Data Anotacije nisu samo vezane za validaciju! Npr.
U njima može da se navede DisplayName koje će
se koristi za prikaz teksta labele koji se uparuje se
atributom klase
47/86
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation
Model i Data validation
• Svaka data anotacija ima parameter ErrorMessage, putem
kog možemo promeniti predefinisanu poruku

Product.cs

48/86
Pogled
• prikazni modul MVC arhitekture (prezentacioni sloj)
• ima ulogu da formira UI i vizualizuje podatke iz modela
• teži se ka tome da poseduje što manje C# koda (što
više HTML) kako bi dizajneri imali veći stepen
razumevanja kreiranog UI
• standardna cshtml datoteka, sa Razor sintaksom
• dostupne promenljive (mogu biti podešene iz
kontrolera):
– ViewBag, ViewData, TempData, //(na nivou requesta)
– Session, //(na nivou pojedinačnog korisnika),
– Cache, Application. //(na nivou aplikacije, dok se ne ugasi
web aplikacija)
49/86
Pogled
– Application promenljiva se koristi za smeštanje globalnih
vrednosti na nivou aplikacije koje se mogu inicijalizovati u
Global.asax.cs datoteci. Objekti postavljeni u Application
nestaju samo ako se web aplikacija ugasi.
• Preporučuje se za podešavnje globalih vrednosti koji sadrže
parametare podešavanja aplikacije. Ne treba je koristiti za skladištelje
kolekcija koje sadže veliki broj objekata.
– Cache promenljiva se koristi za smeštanje globalnih vrednosti
na nivou aplikacije koje imaju privremeni karakter. Prilikom
dodavanja entiteta u Cache omogućeno je postavljanje
životnog veka za entitet. Metode koje to omogučuju se add i
insert prilikom čega je moguće postaviti apslutni životni vek
entiteta (npr. 60 minuta) ili životan vek koji se vezuje za
nekorišćene entiteta (npr.10 minuta). Objekti postavljeni u
Cache nestaju ako se web aplikacija ugasi ili istekne životni
vek promenljive.
• Preporučena za smeštanje vrednosti koje su zahtevne za očitavanje
50/86 iz
baze,a koje se ne menjaju često.
Tok podataka – flow control

51/86
Razor layout
• Jedan od način da se definiše layout za svaku stranicu bi
bio da se implicitno napiše kod koji to omogućuje
• Layout bi se definisao samo 1 u okviru neke cshatml stanice

52/86
Razor layout
• Prethodno nije dobro rešenje jer isti layout najčešće
koristimo za ceo sajt
• Razor omogućuje da ne moramo eksplicitno da postavimo
layout za svaku stranicu već može da se definiše layout
logika za sve stranice, što nam omogućava da chtml fajlovi
budu čitljiviji i lakše da se održavaju
• potrebno je samo u okviru Viewes foldera dodati datoteku
_ViewStart.cshtml
• i u njoj definisati željeni layout, a uklonimo definisanje
layout-a iz ostalih cshtml stranica

_Layout.cshtml 53/86
Prenos podataka iz kontrolera u
pogled na nivou zahteva
• ViewData
• ViewBag
• TempData
• Model

54/86
Prenos podataka iz kontrolera u
pogled
• Primer za ViewBag – pristup kao kod propretija

55/86
Prenos podataka iz kontrolera u
pogled
• Primer za ViewBag – ne zahteva castovanje ako su u
pitanju kompleksni tipovi podatka.
• Ako dođe do redirekcije tada njegova vrednost postaje null

56/86
Prenos podataka iz kontrolera u
pogled
• Primer za ViewBag Controllers/ProizvodiController/Index

57/86
Prenos podataka iz kontrolera u
pogled
• Primer za ViewData – pristup preko ključa

58/86
Prenos podataka iz kontrolera u
pogled
• Primer za ViewData – zahteva castovanje ako su u pitanju
kompleksni tipovi podatka
• Ako dođe do redirekcije tada njegova vrednost postaje null.

59/86
Prenos podataka iz
kontrolera u pogled
• Primer za TempData – pristup
preko ključa
• TempData omogućuje razmenu
podataka između više HTTP
requestova sve dok se prvi put
ne očita u okviru pogleda, tada
se TempData objekat briše.
Koristi se kod redirekcije
između više akcija.

60/86
Prenos podataka iz
kontrolera u pogled
• Primer za TempData

61/86
Controllers/PrimerTempDataController

Prenos podataka iz
kontrolera u pogled
• Primer za TempData – pristup

62/86
Controllers/PrimerModelController
Prenos podataka iz kontrolera u
pogled
• Primer za Model

63/86
Prenos podataka iz kontrolera u
pogled
• Model se pokazao kao veoma zgodan način prenosa
podataka zato što je „type-safe“ tj. rešenje gde je tip
modela podataka poznat u
• compile-time (dok razvijamo aplikaciju)
• Takav pristup implicira InteliSense podršku (razvojno okruženje
nudi propertije i metode kroz sugestije)
• Korekcija grešaka ukoliko pristupamo nepostojećem propertiju
ili metodi

• Šta ako je za formiranje mog prikaza potrebno


više različitih modela?

64/86
Prenos podataka iz kontrolera u
pogled
• Tada treba koristiti ViewModels
• To su C# klase koje imaju za
ulogu da objedine više modela,
ili onih delova modela koji su
relevantni za određeni prikaz.
• Od velike koristi pri validaciji
korisničkih unosa sa UI-a
• Može da sadrži podatke od
strane različitih izvora
• Može da sadrži polja koja se
nalaze isključivo na prikazu

65/86
Prenos podataka iz kontrolera u
pogled
• ViewModeli se u strukturi
ASP.net MVC projekta prave u
zasebnom folderu ViewModels.

66/86
ViewModel/KosarkaskaUtakmicaKlubViewModel, bez Data Anoitacija
Prenos podataka iz kontrolera u
pogled
• Običaj je da se uvek na kraju naziva klase dodaje reč
ViewModel
• Kreirani objekti ViewModel-a se šalju u pogled, npr.
pogled za izmenu proizvoda.
– Klasa proizvod ima atribut koji je referenca na kategoriju
– U pogled treba da se pošalje objekat klase proizvod i lista
kategorija od kojih treba jedna da se odabere

nastavak naredni čas

67/86
Prenos podataka iz kontrolera u
pogled
• ASP.net MVC arhitektura oslanjajući se na koncept
ViewModel

68/86
Mapiranje metode iz HTTP zahteva
na funkciju u kontroleru
• Ako je GET, ništa se dodatno ne piše.
• Ako je POST, stavlja se atribut [HttpPost]
iznad funkcije:
[HttpPost]
// POST: Login/SignIn
public ActionResult
SignIn(LoginFormParams items) {}

69/86
Prenos parametara iz HTTP
zahteva u akciju kontolera
• Pribavljaju se vrednosti preko Request objekta
– može da iziskuje dosta kastovanja podataka
– zgodno za jednostavne i male modele
– radi se kada nije moguće automatsko povezivanje

Controllers/LoginController/SignInBasic 70/86
Model Binding
• ASP.NET MVC model binding omogućava mapiranje
podataka iz HTTP zahteva na model podataka aplikacije.
• To je proces u kome se kreiraju objekti klasa koje
predstavljaju model na osnovu pristiglih podataka iz HTTP
zahteva. Konverzija se oslanja na Model binding.
• Model binding je međusloj koji se aktivira između HTTP
zahteva i metode koja predstavlja akciju kontrolera u C#.
• Postoji dva načina povezivanja
– manuelno povezivanje
– automatsko povezivanje

71/86
Model Binding
• Kod manuelnog povezivanja se podaci iz forme
povezuju 1 po 1 sa podacima iz modela na osnovu
napisanog C# koda
– može da iziskuje dosta kastovanja podataka
– zgodno za jednostavne i male modele
– radi se kada nije moguće automatsko povezivanje

public ActionResult SignIn(FormCollection collection);

• Parametri se pristupa kao asocijativnoj mapi


preko ključa
collection["ime"]; 72/86
Model Binding

Controllers/LoginController/SignInModelManualBinding
73/86
Model Binding
• Kod automatskog povezivanja se podaci iz forme povezuju 1 po
1 sa podacima iz modela automatski
– nema manuelnog kastovanja podataka
– zgodno za velike i složene modele
• Parametri se prepakuju u klasu čiji atributi odgovaraju poljima
forme:
public ActionResult SignIn(LoginFormParams items);
• Klasa ima atribute koji odgovaraju po imenu parametrima forme:
public class LoginFormParams {
public string username {get; set; }
public string password {get; set; }
};

74/86
Model Binding

Controllers/LoginController/SignInModelAutomaticBinding 75/86
Controllers/ProizvodiController

Model Binding – Povera validacije


• Ukoliko se za model definišu validacije sa data
anotacijama, moguće je na serveru proveriti da li je
sve u skaldu sa njima
• U kontroleru se napiše kod
• if(!ModelState.IsValid)

76/86
HTML helper-i
• Uloga HTML helpera jeste da se smanji vreme neophodno za
pisanje
• HTML koda, generišući onaj HTML kod koji se najčešće koristi
• Pristup HTML helperu u okviru Razor-a je dostupan putem
@Html.NazivHelpera
• U okviru Views/Proizvodi/Edit.cshtml
@Html.ActionLink("Svi proizvodi", "Index")
• Se kokvertuje u
<a href="/Proizvodi/Index"> Svi proizvodi </a>

77/86
HTML helper-i
• Jednostvni helperi

78/86
HTML helper-i
• Napredni Html helperi se nazivaju Strongly Typed zato što su
povezani sa @Model objektom (ispis i validacija)

79/86
HTML helper-i
• Kako prikazujemo poruke o greškama?
• Putem HTML helpera, postoje dva načina:
• Prikaz svih poruka odjednom na jednom mestu putem
@Html.ValidationSummary
• Prikaz poruke za svako polje pojedinačno putem
@Html.ValidationMessageFor
• Polje iz @Model za koje važi greška je određeno lambda
izrazom
Controllers/KluboviController
Index
Anotecije Klub, KosarkaskaUtkamica
Create
Views/Proizvodi/Edit.cshtml Anotecije KosarkaskaUtakmicaKlubViewModel
Views/Proizvodi/Browse.cshtml
anotacije 80/86
5. ASP.NET WebAPI
• WebAPI se zasniva na drugačijem konceptu:
– web aplikacija je JavaScript aplikacija, koja se
izvršava na klijentu (browser)
– web server služi da primi i pošalje podatke od/ka web
aplikaciji
– metode C# klasa na serveru se "gađaju" iz klijenta
preko URL-a
• JavaScript upućuje HTTP zahtev ka serveru
• web server pronalazi odgovarajuću klasu i metodu
• povratna vrednost metode se vraća u JavaScript kod
• JavaScript na osnovu primljenih podataka ažurira
odgovarajući deo stranice.

81/86
Client-side programiranje
• Kada se kaže client-side, misli se na JavaScript
program, koji se izvršava u browseru.
• Obično se ne programira u "čistom" JavaScript-u, već se
koriste dodatne biblioteke:
– jQuery
– Angular.js
– Vue
– React

82/86
Views/Proizvodi/Edit.cshtml

You might also like