MVC 3 Area Kavramı

MVC de en kullanışlı yapılardan biri de Area kavramıdır. Peki nedir bu Area kavramı? ASP.NET MVC 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. Mesela Yönetici yetkisindeki kullanıcılar için alt proje kapsamında Admin panel yapabilirsiniz. Kendi sitemde kullandığım area örneklerini inceleyelim isterseniz. Daha açıklayıcı olacaktır.

Projemize sağ tıklayıp Add -> Area diyelim ve areamızın ismini vererek projemize ekleyelim.

Area Ekleme

Ben projeme Admin ve Mobile isimli 2 adet area ekledim. Area yapılarının görünümü şu şekildedir.

Area'lar

Her area altında “Controllers”, “Models” ve “Views” klasörleri yer almaktadır. Bu klasörler içerisine Admin ve Mobile arealarının kendilerine özgü Controller, Model ve View’larını yerleştirmekteyiz.

AdminAreaRegistration ve MobileAreaRegistration dosyalarımız ise arealarımızın URL Routing'lerini tanımladığımız yerlerdir.

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
    "Mobile_default",
    "Mobile/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional });
}

Global.asax dosyamızdaki

AreaRegistration.RegisterAllAreas();

ile Arealarımız projeye dahil edilmektedir. Daha sonra her bir area'nın Controller'larını oluşturup bu controllerlara View'lar ekleyerek işlemimizi tamamlıyoruz.

Artık sitemize bir mobile aygıttan girdiğimizde sitenin Mobile versiyonunu gezebiliriz. Sonuç olarak mobile tarayıcılar için projemizde bir alt proje(area) oluşturduk. Mobile tarayıcıları MVC'de tespit edip nasıl ayrı bir area'ya yönlendireceğimizi ise daha sonra başka bir makalede anlatmayı düşünüyorum. Görüşmek üzere...

YORUMLAR (5)

  1. niyazi ser
    niyazi ser
    Bunu bilmiyordum. Ve şu anda inanılmaz işime yaradı bu bilgi. Çok çok çok teşekkür ederim.
  2. Süleyman Okur
    Süleyman Okur
    Selamlar bende projemde yönetim paneli için bu yönetimi kullanmak istiyorum. ASP.NET Membership kullanıyorum. Acaba Areas altına oluşturduğum Admin isimli alt alana Admin rolünde olmayanların girememesini nasıl sağlayabilirim
    • Mehmet YAYLACI
      Mehmet YAYLACI
      <location path="Admin">
        <system.web>
          <authorization>
            <allow roles="Admin"/>
            <deny users="?"/>
          </authorization>
        </system.web>
      </location>
      Web.config dosyasında bu şekilde admin rolüne izin verip diğer kullanıcıların erişimlerini engelleyebilirsin. Tüm Admin Area'sında geçerlidir bu kural. Yani her sayfa için ayrı ayrı izin vermen gerekmez.
      • Süleyman Okur
        Süleyman Okur
        Selamlar Mehmet Bey. Cevap için teşekkürler çok işime yaradı ancak bu seferde başka bir sorunum oldu. simpleMembershipprovider da kullanıcı email, website adresi gibi bir kaç profil bilgisi saklamak istiyorum. Bunun için Webconfig dosyasında profile altrına property tanımladım. Aynı property leri AccountModel de UserProfile class ında da property olarak oluşturdum. Accountcontrollerda register action ını ve register view ınde gerekli yerleri düzenledim. Ver tabanına sonradan eklediğim propertyler için column oluşturulmuyor . Bir çok makalede okudum ama bir türlü çözemedim . Bu şekilde kullanıcın password recovery işlemini de yaparken gizli soru ve cevabı sorup buna göre email göndermek , doğum gününe göre tema değiştirmek gibi farklı işlemler yapmam gerekiyor. Yardımcı olabilirseniz sevinirim. Farklı kaynak arayışındayım.
        • Mehmet YAYLACI
          Mehmet YAYLACI
          Merhaba. Üzgünüm Süleyman bey. Ancak bahsettiğiniz konu hakkında pek bir bilgim yok ve böyle bir şeyi denemedim daha önceden. O yüzden üzgünüm ki yardımcı olamayacağım. Teşekkürler.

YORUM FORMU

Cevap verilen yorum:
  • Süleyman Okur
    Süleyman Okur
    Selamlar bende projemde yönetim paneli için bu yönetimi kullanmak istiyorum. ASP.NET Membership kullanıyorum. Acaba Areas altına oluşturduğum Admin isimli alt alana Admin rolünde olmayanların girememesini nasıl sağlayabilirim