TOC

This article has been localized into Hungarian by the community.

Vezérlők:

Akcióeredmények

Előzőleg az akciókról beszéltünk, amelyek a vezérlőn definiált metódusok. Akciók vannak végrehajtva amikor egy kért URL egy vezérlőn szereplő akcióhoz társul (utóbbit az útválasztó, vagy routing rendszer kezel). Amikor az akció (metódus) befejezte a munkáját, általában visszatérít valami a kliensnek, ez a valami pedig általában a IActionResult felületet valósítja meg (vagy a Task<IActionResult>-ot, ha a metódus aszinkron).

Ha a vezérlőd a beépített Controller alaposztályból ered (Microsoft.AspNetCore.Mvc.Controller), akkor számos segítő metódust kapunk a megfelelő válasz generálására (az akcióeredményre). Már használtunk egy ilyen metódust korábban: a View() metódust. Ez keres egy megfelelő nézetfájlt és készít belőle egy ViewResult példányt (ez az osztály megvalósítja az IActionResult felületet). Ezután ezt az objektumot az ASP.NET MVC böngészőnek való válasszá alakítja - ez esetben egy "OK" státuszkód, majd egy HTML test formájában.

Egy nézet közel sem az egyetlen lehetséges eredménye egy akciónak. Mivel az eredmény végül egy böngészőben fog kikötni, a rendelkezésünkre álló metódusok egy HTTP kérés minden lehetséges eredményét fedniük kell. Ezért egy akció eredményezhet természetesen átirányítást, 404-es kódot (oldal nem található), bármilyen más HTTP státuszkódot. A teljesség igénye nélkül itt egy lista a legérdekesebb és leghasznosabb akcióeredményeket teremtő metódusokról:

  • Content() - visszatérít egy megadott stringet egyszerű szövegként a kliensnek (általában a böngészőnek)
  • View() - visszatérít egy nézetet a kliensnek
  • PartialView() - részleges nézetet térít vissza a kliensnek (erről később még szó lesz)
  • File() - egy fájlt tartalmát téríti vissza a kliensnek
  • Json() - JSON választ térít vissza a kliensnek
  • Redirect() és RedirectPermanent() - átirányítási választ ad a böngészőnek (ideigleneset, illetve állandót/permanenset), amivel a felhasználó más URL-re van átirányítva
  • StatusCode() - tetszőleges státuszkódot térít vissza a kliensnek

Ennél több is van, és persze sajátot is írhatsz, vagy magad is generálhatod a válaszokat - a fenti metódusok csupán új példányt készítenek a megfelelő osztályból és beállítják a megfelelő tulajdonságokat ezen a példányon. A Content() metódus például egy ContentResult példányt készít, majd azon a Content tulajdonsághoz rendeli az értéket, amit eredetileg a metódusnak adtál.

Sok más típusú válasz is létezik ami az IActionResult felületet megvalósítja, az akcióid pedig bármelyiket visszatéríthetik, a metódusod logikájától függően. Gyakran használjuk ezt a lehetőséget nézet vagy tartalom, illetve ha az nem található, akkor egy 404-es hibakód (oldal nem található) visszatérítésére. Ez így nézhet ki:

public IActionResult Details(int id)  
{  
	Product product = GetProduct(id);
	if (product != null)  
		return View(product);  
	return NotFound();  
}

Az első sorban megpróbáljuk a kért tartalmat betölteni, a később megírandó GetProduct() metódus segítségével. Ha ez eredménnyel jár, akkor visszatérítjük nézeten belül a View() metódus segítségével - ha nem, akkor egy 404-es hibakódot adunk ki a NotFound() segédmetódus segítségével, ami lényegében egy NotFoundResult objektumot hoz létre. Ebben az esetben tehát két lehetséges kimenetele van az akciónak, de több is lehetne, ha szükséges - bármit visszatéríthetsz, ami az IActionResult felületnek eleget tesz.

Összefoglaló

Egy akció (Action) egy metódus egy vezérlőn (Controller), amit általában egy URL-el lehet elérni a routing rendszernek köszönhetően. Az akció általában egy akcióeredményt, Action Resultot eredményez, amely az IActionResult felületen alapszik. Sok segédmetódus is rendelkezésedre áll hogy a kívánt eredményt generáld akcióidban. Ezek a legfontosabb dolgok, amiket tudnod kell az ASP.NET MVC vezérlőkről. Későbbi fejezetekben már ennél részletesebb tudnivalókba fogunk belevágni.

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!