📖 Šta su Action Metode?
Action metode su javne metode u Controller klasama koje obrađuju HTTP zahtjeve. Svaka action metoda vraća ActionResult koji određuje kako će MVC odgovoriti na zahtjev.
public class HomeController : Controller
{
public ActionResult Index()
{
return View(); // Vraća ViewResult
}
}
🎯 ActionResult Tipovi
1. ViewResult - Prikaz View-a
public ActionResult Index()
{
return View(); // Koristi konvenciju: Views/Ministry/Index.cshtml
}
public ActionResult Details(int id)
{
var model = GetMinistry(id);
return View(model); // Prosljeđuje model u view
}
public ActionResult Dashboard()
{
return View("ExecutiveSummary"); // Eksplicitno ime view-a
}
2. RedirectResult - Preusmjeravanje
// Preusmjeravanje nakon prijave
public ActionResult AfterLogin()
{
return RedirectToAction("Index", "Dashboard");
}
// Preusmjeravanje sa parametrima
public ActionResult AfterCreate(int id)
{
return RedirectToAction("Details", "Ministry", new { id = id });
}
3. JsonResult - JSON Odgovor
4. ContentResult - Tekstualni Odgovor
public FileResult DownloadReport()
{
byte[] fileBytes = GetReportBytes();
return File(fileBytes, "application/pdf", "Izvjestaj.pdf");
}
public ContentResult XmlExport()
{
return Content("Finansije ", "text/xml");
}
🔗 Model Binding i Njegov Cjevovod
Model Binding automatski mapira podatke iz HTTP zahtjeva (form, query string, route) na parametre action metode.
U sistemima kao što su portali e-Uprave, HTTP zahtjevi su često kompleksni (imaju velika tijela i mnoštvo parametara). MVC koristi DefaultModelBinder i ValueProviders kako bi automatski pronašao i kreirao C# objekte za vas.
Slika: Cjevovod (Pipeline) ASP.NET MVC Model Binding-a
Redoslijed Pretraživanja Podataka (Value Providers)
Kada traži vrijednost za parametar (npr. int id), Model Binder usput pokreće razne
ValueProvidere i pretražuje lokacije ovim prioritetnim redom:
- Form Data (POST parametri poslani formom/HTML-om)
- Route Data (Parametri unutar URL rute definirane u RouteConfig, npr.
/Employee/Edit/{id}) - Query String (URL parametri, Npr.
?id=5) - Fajlovi (Uploadovani dokumenti)
Primitivni Tipovi
// URL: /Ministry/Details/5
public ActionResult Details(int id) // id = 5
// URL: /Ministry/Search?code=MF&year=2023
public ActionResult Search(string code, int year)
{
// code = "MF", year = 2023
}
// Form POST
[HttpPost]
public ActionResult Create(string departmentName, decimal budget)
{
// Automatsko mapiranje iz forme
}
Kompleksni Objekti i JSON Datoteke
Aplikacije moderne uprave u pozadini često mapiraju kompleksne, ugniježđene JSON objekte jer frontend
komunicira asinhrono sa MVC kontrolerima (AJAX). MVC to hendla automatski putem
JsonValueProviderFactory.
[HttpPost]
public ActionResult Create(Department dept)
{
// MVC automatski mapira form/JSON property-je na Department svojstva
// Ako klijent pošalje "DepartmentName": "MUP", on će automatski uraditi:
// dept.DepartmentName = "MUP";
if (ModelState.IsValid)
{
db.Departments.Add(dept);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(dept);
}
🎯 Praktična Vježba
Zadatak: Kreirajte Action Metode za Ministarstva
Kreirajte MinistryController sa action metodama za prikaz svih ministarstava i JSON
pretragu po kodu.
public class MinistryController : Controller
{
public ActionResult Index()
{
var ministries = db.Departments.ToList();
return View(ministries);
}
public JsonResult Search(string code)
{
var results = db.Departments
.Where(d => d.DepartmentCode.Contains(code))
.ToList();
return Json(results, JsonRequestBehavior.AllowGet);
}
}
✅ Zaključak
Naučili ste:
- ✅ Različite ActionResult tipove (View, Redirect, Json, Content)
- ✅ Kako Model Binding automatski mapira podatke
- ✅ Kako koristiti primitivne i kompleksne tipove