Controllers

Als we HomeController.cs openen in het mapje Controllers zien we een hele hoop nieuwe code. Om deze te begrijpen starten we best vanboven.

HomeController erft over van de klasse Controller. Als we eens naar de definition van Controller kijken (rechterklikken, Go To Definition, of aanduiden en F12 duwen) dan zien we dat er een hele hoop methodes zijn met een datatype _Result. Er zijn er veel, maar de meest interessante voor ons is zonder twijfel deze:

Als we deze methode oproepen gaan we een ViewResult aanmaken. Waarom dat nuttig is zien we meteen.

Een beetje lager zien we het volgende:

Hier gebruiken we Dependency Injection, een term dat we nog vaak gaan tegenkomen, zodat we de logger kunnen gebruiken in  onze HomeController. Hoe dit exact in zijn werk gaat, zien we later.

Vanaf hier wordt het heel interessant:

We maken een methode Index. Deze returned een ViewResult. Als wij in onze HomeController de Index opvragen, willen we naar de juiste pagina verwijzen.

En heel toevallig staat die pagina

  • In het mapje Views
    • In het mapje Home
      • Onder de naam Index.cshtml

Ik kan je nu al zeggen, toevallig is dat helemaal niet! Naamgeving is heel belangrijk in ASP.NET Core.

  • Als je een MVC template gebruikt bij het aanmaken van je project kan je hier moeilijk op misslaan. Het mapje Views bestaat al, dus je programma weet perfect waar hij moet kijken.
  • Aangezien onze controller HomeController heet, moet het onderliggende mapje ook Home heten. Dit is zeer belangrijk! Weet je nog dat we in de klasse Startup hadden gezegd dat UseRouting eigenlijk een “klein brein” is? Dat is wat hiermee bedoelt wordt. Wij gaan nergens specifiek zeggen dat er moet gekeken worden in het mapje Home, maar omdat onze naamgeving klopt, snapt ons programma perfect wat er moet gebeuren.
  • Ook de naamgeving van onze methode is belangrijk. Namelijk Index. Ook deze wijst naar Index.cshtml, dat begrijpt ons klein brein ook.

Als je aan deze voorwaarde voldoet hangt de VC van ons MVC verhaal al samen. De applicatie begrijpt perfect wat er moet gebeuren vanaf dat je in de controller Home de view Index opvraagt aan de hand van naamgeving alleen.

Als we even teruggaan naar Startup.cs dan wordt dit stukje misschien al iets duidelijker:

Hier kan je de controller of de action van de startpagina aanpassen. Probeer bijvoorbeeld eens Index aan te passen naar Privacy. Aangezien we public IActionResult Privacy() hebben in onze HomeController, zou ons programma moeten snappen waar hij naartoe moet gaan.

Als je je afvraagt waarom we het hier een action noemen en geen view, een action kan nog andere resultaten teruggeven dan views alleen, maar meer daarover later.

Helemaal onderaan in de HomeController zien we ook nog dit:

Ik denk dat we voor nu nog even akkoord kunnen gaan dat een deel van deze blok code dit iets te complex is voor ons, maar dit gaat onze Error.cshtml pagina genereren. Het enige wat voor nu interessant is voor ons, is dat hij in de View methode een object meestuurt. Namelijk een ErrorViewModel object. En laat dat nu net het allerlaatste stukje code zijn dat we nog moeten bekijken dit hoofdstuk!