MVC - C jak kontroler


Każda metoda klasy kontrolera oznaczona jako public jest automatycznie akcja i możliwe jest dostanie się to niej z dowolnego miejsca przez odpowiednie wysterowanie URLem.

Aby metoda była akcją musi spełniać warunki:
  1. musi być public
  2. nie może być static
  3. nie może być metodą rozszerzeń (extension method)
  4. nie może to być konstruktor, getter ani setter
  5. nie może być metodą klasy bazowej kontrolera
  6. nie może mieć parametrów ref ani out
  7. nie może mieć otwartych typów generycznych
Akcja controlera zwraca jeden z typów:
  1. ViewResult
  2. EmptyResult
  3. RedirectResult
  4. JsonResult
  5. JavaScriptResult
  6. ContentResult
  7. FileContentResult
  8. FilePathResult
  9. FileStreamResult
Typy te jednak zazwyczaj nie są zwracane jawnie. Wołamy natomiast jedną z funkcji klasy bazowej
  1. View -> ViewResult
  2. Redirect –> RedirectResult
  3. RedirectToAction –> RedirectToRouteResult
  4. RedirectToRoute –> RedirectToRouteResult
  5. Json –> JsonResult
  6. JavaScriptResult –> JavaScriptResult
  7. Content –> ContentResult
  8. File –> FileContentResult, FilePathResult, FileStreamResult - w zależności od przekazanych parametrów

Jeśli z akcja zwróci jakąś wartość np date - to zostanie ona automatycznie opakowana w typ ContentResult - czyli przetłumaczona na zwykły tekst i jako string przekazana do przeglądarki
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
    public class WorkController : Controller
    {
 
        public DateTime Index()
        {
            return DateTime.Now;
        }

    }
}
Jeśli nie chcemy aby metoda była akcją możemy ją udekorować NonAction
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class WorkController : Controller
    {
        [NonAction]
        public string CompanySecrets()
        {
            return "This information is secret.";
        }

    }
}



Klasa kontrolera zawsze musi posiadać suffix Controller inaczej nie będzie można wywołać kontrolera

Komentarze

Popularne posty