Kako MVC aplikacija funkcionise? (MVC Serija - Dio 4)

ASP.NET Webforms HTTP Request

Kada ukucamo adresu stranice u pretrazivac i kilknemo na go mi u stvari saljemo jedan HTTP Request (zahtjev preko http protokola). Server primi zahtjev i na osnovu extenzije (asp, aspx, php) zna kako da obradi zahtjev i uputi ga na uzorak stranice snimljen na serveru (npr default.aspx). Ako stranica zahtijeva dinamicno procesiranje na serveru, server ce da izvrsi zahtijevane operacije, kompajlira stranicu i posalje je natrag pretrazivacu u HTML formatu. Ova shema se primjenjuje i za ASP.NET webforms (klasicne ASP.NET stranice).

Egzekucija zahtjeva u MVC aplikaciji

Ako se prisjetimo iz prethodnog posta MVC aplikacija se sastoji iz 3 glavna dijela:

1.Model - dio koji sadrzi kode za interakciju sa spremistem podataka
2.Kontroler - dio koji sadrzi logiku aplikacije
3.View - dio koji je zaduzen za iterakciju sa korisnikom

HTTP Request (zahtjev) se izvrsava na drugaciji nacin u MVC aplikaciji. Svi zahtjevi se usmjeravaju odgovarajucem kontroloru koji ce da izvrsi akciju specificiranu zahtjevom. Akcija moze da zahtjeva interakciju sa modelom, ali ce da se zavrsi pozivanjem odgovarajuce View stranice koja ce da se prikaze korisniku.

Kako MVC aplikacija zna kojem kontrolor-u da usmjeri zahtjev?

.NET Framework 3.5 ukljucuje veoma mocan Routing System (sistem usmjeravanja zahtijeva) koji ima dvije funkcije:

1.Usmjeri dolazece zahtijeve, u slucaju MVC-a odgovarajucem kontrolor-u
2.Konstrukcija odlazecih URL koji se koriste za pozivanje kontrolora

Pravila usmjeravanja

Pravila za usmjeravanje dolazecih zahtijeva su specificirana u Routing rules ( pravila usmjeravanja) u Global.aspx fajlu, sto nam omogucava da promijenimo pravila usmjeravanja na aplikacijskom nivou - promjena pravila u jednom mjestu primijeniti ce se u citavoj aplikaciji. Global.aspx sadrzi events(dogadjaje) i variable koje se karakteristicne za citavu aplikaciju. Naprimjer Application_Start event handler (manipulator dogadjaja) ce uvijek da izvrsi kada aplikacija startuje.

Prilikom kreiranja nove MVC aplikacije, VWD automatski kreira default (osnovno) pravilo i registruje ga u Global.aspx fajlu:

public class MvcApplication : System.Web.HttpApplication

{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute(
"{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}

protected void Application_Start()
{
RegisterRoutes(
RouteTable.Routes);
}
}

U kodu vidimo da u Application_Start event handler-u se poziva RegisterRoutes funkcija kojoj se kao argument salje RouteTable.Routes. RegisterRoutes funkcija definira osnovno pravilo usmjeravanja:

routes.MapRoute(
"Default",
// Route name
"{controller}/{action}/{id}",
// URL with parameters
new { controller = "Home", action = "Index", id = "" }
// Parameter defaults
);

Map route funkcija uzima 3 argumenta:

1.RouteName - ime pravila ("Default")
2.URL pattern - pravilo usmjeravanja ("{controller}/{action}/{id}")
3.Defaultne vrijednosti (new { controller = "Home", action = "Index", id = "" })

"{controller}/{action}/{id}",  - znaci pozovi mi kontroler {controller}, izvrsi akciju {action}, posalji id argument akciji {id}.

Kontrolor, akcija i argumenti
Znaci http://mojaprodavnica.com/katalog/proizvod/3 ce po definiranom pravilu biti usmjeren na katalog controller izvrsice proizvod akciju, koja je ustvari funkcija koja ce da prihvati vrijednost 3 za id argumenat:

public class KatalogController : Controller
{
public ActionResult Proizvod(int id)
{

//Ovdje dolazi logika da se data za proizvod obrade.Na primjer poziv u bazu podataka preko klasa u Model -u, kojima se posalje id proizvoda moze da vrati data za proizvod 
//Kao u slijedecem pseudo primjeru:
//Proizivod.NajdjiProizvod(id);
//Kad imamo data za proizvod slijedeci korak je da pozovemo view stranicu koja ce da to prikaze korisniku

return View();
}

Defaultne vrijednosti

Defaultna vrijednost je izvrsena ako ni jedan od ovih parametara je prisutan u URL-u. Znaci ako npr ne definiramo kontroler, akciju i argumente znaci zatrazimo http://mojaprodavnica.com zahtjev ce se usmjeriri na kontroler koji je definiran u defultnoj vrijednosti:

new { controller = "Home", action = "Index", id = "" } - pozovi mi Home kontroler, Index akciju i posalji prazan string kao argumenat.

U gornjoj konstrukciji koristene se nove osobine .Net jezika anonymouse types i object initializers.

U iducem postu cemo da kombiniramo sto smo naucili o MVC pattern-u i iz serije postova o LINQ-u da kreiramo nasu prvu MVC aplikaciju.

Da procitate seriju postova o LINQ-u kliknite ovdje.

Currently rated 1.5 by 2 people

  • Currently 1.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5