Veysel Uğur KIZMAZ

Asp.Net MVC Area Kavramı

16.06.2012Okunma Sayısı: 13354Kategori: ASP.NET MVC
 Bu maklemizde Asp.Net MVC’de Area kavramını inceleyelim.
Asp.Net MVC’de projemizde Area yapısı sayesinde birden fazla alt alanlar (yapılar) ekleyebiliriz. Alt alan dediğimiz ne oluyor? diyebilirsiniz. Ana projenin altında, ama kendi içinde yapılandırılmış alt projeler gibi de düşünebilirsiniz. En iyisi bir örnek ile inceleyelim, daha iyi anlaşılacaktır.
 
Yeni bir Asp.Net MVC 3 Web Application – Empty Application oluşturalım.
 
Projemize sağ tıklayıp Add -> Area diyelim.
 
 
 
Izleyici, Kullanici ve Yonetici isminde 3 tane area ekleyelim.
 
 
Her area altında “Controllers”, “Models” ve “Views” klasörleri yer almaktadır. Bu klasörler içerisine Izleyici, Kullanici ve Yonetici arealarının kendilerine özgü Controller, Model ve View’larını yerleştirmekteyiz.
 
IzleyiciAreaRegistration, KullaniciAreaRegistration ve YoneticiAreaRegistration dosyalarımız ise arealarımızın ayarlarını yaptığımız dosyalarımızdır.
 
Örneğin, IzleyiciAreaRegistration.cs kodlarını inceleyelim.
 
  1. public class IzleyiciAreaRegistration : AreaRegistration
  2.     {
  3.         public override string AreaName
  4.         {
  5.             get
  6.             {
  7.                 return "Izleyici";
  8.             }
  9.         }
  10.  
  11.         public override void RegisterArea(AreaRegistrationContext context)
  12.         {
  13.             context.MapRoute(
  14.                 "Izleyici_default",
  15.                 "Izleyici/{controller}/{action}/{id}",
  16.                 new { action = "Index", id = UrlParameter.Optional }
  17.             );
  18.         }
  19.     }
 
RegisterArea() methodu ile Global.asax’taki RegisterRoutes’a benzer işlemi gerçekleştirmektedir.
 
Şimdi Izleyici/Controllers altına HomeController, Kullanici/Controllers altına HomeController, Yonetici/Controllers altına HomeController Controller sınıflarını ekleyelim. Bu sınıfları aşağıdaki gibi düzenleyelim.
 
Izleyici/Controllers/HomeController.cs
  1. public class HomeController : Controller
  2. {
  3.     public ActionResult Index()
  4.     {
  5.         return View();
  6.     }
  7. }
 
 Kullanici/Controllers/HomeController.cs
  1. public class HomeController : Controller
  2. {
  3.     public ActionResult Index()
  4.     {
  5.         return View();
  6.     }
  7. }
 
Yonetici/Controllers/HomeController.cs
  1. public class HomeController : Controller
  2. {
  3.     public ActionResult Index()
  4.     {
  5.         return View();
  6.     }
  7. }
 
Şimdi her üç controllerın Index methodlarına sağ tıklayıp Add View ile birer View ekleyelim.
 
Şimdi View’larımızın içini aşağıdaki gibi dolduralım.
 
Izleyici/Views/Home/Index.cshtml
  1. @{
  2.     ViewBag.Title = "Index";
  3.     Layout = "~/Views/Shared/_Layout.cshtml";
  4. }
  5.  
  6. <h2>İzleyici Giriş Sayfası</h2>
 
Kullanici/Views/Home/Index.cshtml
  1. @{
  2.     ViewBag.Title = "Index";
  3.     Layout = "~/Views/Shared/_Layout.cshtml";
  4. }
  5.  
  6. <h2>Kullanıcı Giriş Sayfası</h2>
 
Yonetici/Views/Home/Index.cshtml
  1. @{
  2.     ViewBag.Title = "Index";
  3.     Layout = "~/Views/Shared/_Layout.cshtml";
  4. }
  5.  
  6. <h2>Yönetici Giriş Sayfası</h2>
Şimdi her bir areanın ayarlarını yapılandırdığımız IzleyiciAreaRegistration.cs, KullaniciAreaRegistration.cs, YoneticiAreaRegistration.cs dosyalarını aşağıdaki gibi düzenleyelim.
 
IzleyiciAreaRegistration.cs
  1. public class IzleyiciAreaRegistration : AreaRegistration
  2. {
  3.     public override string AreaName
  4.     {
  5.         get
  6.         {
  7.             return "Izleyici";
  8.         }
  9.     }
  10.     public override void RegisterArea(AreaRegistrationContext context)
  11.     {
  12.         context.MapRoute(
  13.             "Izleyici_default",
  14.             "Izleyici/{controller}/{action}/{id}",
  15.             new { controller = "Home", action = "Index", id = UrlParameter.Optional }
  16.         );
  17.     }
  18. }
 
KullaniciAreaRegistration.cs
  1. public class KullaniciAreaRegistration : AreaRegistration
  2. {
  3.     public override string AreaName
  4.     {
  5.         get
  6.         {
  7.             return "Kullanici";
  8.         }
  9.     }
  10.     public override void RegisterArea(AreaRegistrationContext context)
  11.     {
  12.         context.MapRoute(
  13.             "Kullanici_default",
  14.             "Kullanici/{controller}/{action}/{id}",
  15.             new { controller = "Home", action = "Index", id = UrlParameter.Optional }
  16.         );
  17.     }
  18. }
YoneticiAreaRegistration.cs
  1. public class YoneticiAreaRegistration : AreaRegistration
  2. {
  3.     public override string AreaName
  4.     {
  5.         get
  6.         {
  7.             return "Yonetici";
  8.         }
  9.     }
  10.     public  override void RegisterArea(AreaRegistrationContext context)
  11.     {
  12.         context.MapRoute(
  13.             "Yonetici_default",
  14.             "Yonetici/{controller}/{action}/{id}",
  15.             new { controller = "Home", action = "Index", id = UrlParameter.Optional }
  16.         );
  17.     }
  18. }
 
Bu düzenleme sayesinde projemizde ProjeAdi/Yonetici olarak çalıştırdığmızda otomatik olarak Yonetici/Home/Index View’ını, ProjeAdi/Kullanici olarak çalıştırdığmızda otomatik olarak Kullanici/Home/Index View’ını, ProjeAdi/Izleyici olarak çalıştırdığmızda otomatik olarak Izleyici/Home/Index View’ını çalıştırabilelim.
 
Şimdi projemizi çalıştıralım ve ekran sonuçlarını inceleyelim.
 
 
 
 
 
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi