Bildiğini gibi (MVC - Model View Controller) kullanırken dosyalarınız Models, views ve controllers klasörleriniz altında toplanır ve bir controller'dan bir action çağırdığınıza ona rastlayan view derlenir ve kullanıcıya gösterilir. Ancak dosyalarınızın yönetimini kolaylaştırmak, erişim hakları hakkında daha rahat yönetim yapmak, vs.. gibi kaygılar yüzünden daha fazla alt klasör kullanmak isterseniz yapmanız gereken bazı şeyler var diyebilirim.
Öncelikle sadece dosyaları aynı hiyerarşi doğrultusunda hazırlayalaım ve çıkacak hata doğrultusunda ne yapmamız gerektiğine gidelim, bu sayede ne yapmaya neden ihtiyacımız olduğunu da görürüz.
Örneğimizde; yönetici işlerini ayırmak için Admin diye bir klasör kullanmak istediğinizi ve bu admin klasörü altında da işleri kategorize ederek farklı klasörlere koymak istediğinizi varsayalım.

Burada gördüğünüz gibi Controllers klasörümüzde Admin adında bir klasörümüz ve içinde de MessageProblemsController.cs adında bir dosyamız var. Views klasörümüzde de Admin klasörü altında - olması umulduğu gibi- MessageProblems adında bir klasörümüz var ve içinde Index.aspx diye bir dosyamız var. Burada amacımız yöneticinin girip Mesaj problemleri listesini görmesi olsun. Eğer istersek Index.aspx yanına Edit.aspx, Insert.aspx gibi ekleme, değiştirme özelliklerini de ekleyebilir ve messageproblemscontroller.cs dosyamızın içine Edit ve Insert View Action'larını yazarak bu özellikleri de elde edebiliriz. Örnek amacından şaşmasın diye yalnızca Index.aspx ile anlatıyorum.MessageProblemsConroller.cs dosyasının içine aşağıdaki kodu ekleyelim.
public ActionResult Index()
{
return View();
}
Örneğimizi çalıştırırsak ve /Admin/MessageProblems yazarsak tarayıcımıza, bulunamadı hatası alacağız. Peki neden?
Çünkü global.asax dosyasına bakarsak bir route hazırlandığını ve kaydedildiğini - kullanılıyor olduğunu - göreceğiz. Bu route'u bir inceleyelim.

Burada bir default adında route tanımlanmış, önce controller adının beklendiği, sonra action adının beklendiği daha sonra da id özelliğinin beklendiği belirtilmiş. Öntanımlı değerler olarak da Home controller'ının, Index hareketi tanımlanmış. Biz bir admin klasörü altında controller'larımızı koyuyoruz haliyle görülemiyor ve açılamıyor bu route ile. Demek ki bir route daha yazıp admin klasörünün altında da controller araması gerektiğini bildirmeliyiz.

Mavi ile işaretli alana bakarsanız admin adında bir route daha tanımladğımızı görürsünüz. Buradaki tek fark admin klasörünün de içine bakılması gerektiğini bildirmiş oluyoruz. Şimdi çalıştırdığımızda bu sefer bazı klasörlerin altında aradığını ancak bulamadığı konusunda hata verecektir. Bu sefer sorun nedir, nereye bakıp nasıl çözmeliyiz?
Bu sefer ki sorun, controller çalıştığı halde istediğimiz view dosyasına ulşamaması. Bunun için de view dosyasını bulmasına yardımcı olmamız lazım. Bunun için model klasörünün altına bir kod dosyası yaratın, mesela adı adminviewengine.cs olsun ve içine aşağıda yazan kodu yazın ve kaydedin.

Bu işlemi de yaptıktan sonra global.asax dosyasındaki RegisterRoutes fonksiyonuna şu satırı da eklemeliyiz.
ViewEngines.Engines.Add(new AdminViewEngine());
Çalıştırdığımızda herşeyin doğru çalışıyor olduğunu göreceksiniz.
Artık yalnıca Controllers, Views klasörlerine mahkum değilsiniz. Büyük uygulamalar yaratırken yüzlerce hatta binlerce view ya da controller'a ihtiyacınız olacaktır, bunları bu şekilde kategori edebilirsiniz.
Not: Bu örnek Microsoft Asp.NET MVC RC2 ile hazırlanmıştır, daha alt ya da daha üst RC sürümlerinde ya da tam sürümünde değişiklik olabilir ve çalışmayabilir.
İyi çalışmalar.