Model-View-Controller – ASP .NET MVC, wprowadzenie

ASP .NET MVC jest frameworkiem wspierającym wzorzec projektowy MVC. Należy zdawać sobie sprawę, że przechodząc z klasycznego ASP .NET na ASP .NET MVC tracimy możliwość korzystania ze zbioru kontrolek typu ListView, Repeater itp. Na początku może wydawać się to bardzo ograniczające jednak w praktyce czas wymagany na stworzenie aplikacji webowej jest niewiele dłuższy a za to zyskujemy znacznie większą elastyczność. Ponadto ze względu na brak standardowych kontrolek nie ma bałaganu z ViewState. Uogólniając, interfejs tworzymy w ASP .NET MVC za pomocą czystego HTML oraz kilku helperów.

Stwórzmy więc pierwszy projekt. Po wybraniu stosownego szablonu (ASP .NET MVC 2 Web Application) zostaniemy zapytani czy chcemy wygenerować również projekt dla testów jednostkowych:

 

image

Po akceptacji w Solution ujrzymy dwa projekty: aplikacja web oraz testy jednostkowe. Przyjrzyjmy się bliżej automatycznie wygenerowanej stronie www.

 

image

W projekcie zwartych jest kilka folderów: Content, Controllers, Models, Scripts, Views. W Content zwykle przechowujemy style css, w Scripts skrypty JS a w Models modele (np. wrappery warstwy biznesowej). Views zawiera widoki danych czyli interfejsy webowe napisane np. w XHTML.

image Jak widać na screenie, w Views znajdują się podfoldery. Taka struktura nie jest przypadkowa i należy jej przestrzegać. Wiąże się to ściśle z kontrolerami dlatego zobaczmy również jak wygląda ich struktura:

image

Nazwy klas kontrolerów powinny wyglądać następująco:[Nazwa]Controller. Związane jest to z domyślnym poszukiwaniem widoków dla danego kontrolera. AccountController szuka swojego widoku w folderze Views\Account z kolei HomeController w folderze Views/Home. W Views istnieje jeszcze jeden folder – Shared. Zawiera on widoki przeznaczone dla wszystkich kontrolerów. Jeśli zatem np. AccountController nie znajdzie stosownego widoku w Views\Account, znacznie go szukać w Views\Shared. Możemy w nim umieszczać części wspólne dla całego serwisu np. MasterPage lub fragmenty strony (panel logowania, menu).

Zobaczmy przykładową implementację kontrolera:

[HandleError]
public class HomeController : Controller
{
   public ActionResult Index()
   {
       ViewData["Message"] = "Welcome to ASP.NET MVC!";

       return View();
   }
   public ActionResult About()
   {
       return View();
   }
}

Oczywiście każda klasa kontrolera musi dziedziczyć po Controller. Przedstawiony HomeController zawiera 2 akcje: Index oraz About, które mapowane są na adresy WWW:www.domain.com/Home/Index i www.domain.com/Home/About. Zainteresowanych odsyłam do pliku Global.asax, w którym mapowania są zdefiniowane.

Użytkownik wpisując adres www.domain.com/Home/Index do przeglądarki wywołuje metodę Index. Programista  może  w niej wywoływać metody modelu lub warstwy biznesowej a następnie musi zwrócić odpowiednik widok. Metoda View zwraca domyślny widok dla akcji i kontrolera czyli dla metody Index jest to Views\Home\Index lub Views\Shared\Index jeśli ten pierwszy nie został znaleziony.

W następnym poście pokażę jak tworzyć widoki w ASP .NET MVC oraz co ofertują nam dostarczone helpery.

Leave a Reply

Your email address will not be published.