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:
Po akceptacji w Solution ujrzymy dwa projekty: aplikacja web oraz testy jednostkowe. Przyjrzyjmy się bliżej automatycznie wygenerowanej stronie www.
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.
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:
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.