MVC kullanırken Controller ve View'lar klasörler altına nasıl toplanır.

March 7, 2009 at 9:31 AMoozturk

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.

Posted in: ASP.NET | MVC

Tags: , , ,

Comments (28) -

Superb! Generally I never read whole articles but the way you wrote this information is simply amazing and this kept my interest in reading and I enjoyed it. You have got good writing skills.

Reply

I wanted to thank you for this great read!! I definitely enjoying every little bit of it I have you bookmarked to check out new stuff you post

Reply

I am glad I found your website on msn. Thank you for the sensible critique. Me and my wife were just preparing to do some research about this. I am glad to see such great info being shared for free out there.
Best wishes,
Ammon from Cincinnati city

Reply

Zero Nicotine is an innovative cessation aid designed to help you give up smoking safely and naturally, WITHOUT PUTTING MORE NICOTINE INTO YOUR BODY. If you are serious about your decision to quit, you’ve come to the right place! With its unique blend of ingredients, Zero Nicotine offers you the best possible chance to finally kick the habit for good!

Reply

Awesome site, just bookmarked it on delicious. Hopefully, you can see a few more visitors.

Reply

I didn't see a button anywhere but do you allow advertising? I have a few in the same niche and I would like to add my banner somwhere on your page.

Reply

Cool post . Thanks for, commenting on this blog man. I will message you some time! I didn't know that!

Reply

When are you going to post again? You really entertain  a lot of people!

Reply

This really answered my problem, thank you!

Reply

If you could email me with some tips about how you made this blog site look this cool, I would be appreciative!

Reply

Oh man. This site is cool. How do you  make it look this good !?

Reply

If you could email me with any tips on how you made your site look this awesome , I would appreciate it.

Reply

How do you make your site look this sick. Email me if you want and share your wisdom. I'd appreciate it.

Reply

Please message me with any hints & tips on how you made your blog look like this , I'd appreciate it!

Reply

This blog site is very cool! How can I make one like this ?

Reply

This blog site is really cool! How can I make one like this ?

Reply

Have you considered adding some relevant links to the article? I think it might enhance my understanding.

Reply

Please email me with any hints on how you made this blog site look like this , I'd be appreciative.

Reply

How do you make your blog site look this awesome! Email me if you want and share your wisdom. I'd be appreciative!

Reply

Can you email me with a few tips about how you made your site look like this, I'd be thankful!

Reply

Can you email me with some hints & tips about how you made your blog site look this good, I'd be thankful.

Reply

This website has got a lot of really useful information on it. Cheers for informing me.

Reply

Just discovered this blog through Yahoo, what a pleasant shock!

Reply

A cool blog post there mate ! Cheers for posting .

Reply

This site has got some extremely useful stuff on it! Cheers for helping me.

Reply

This website has lots of extremely useful stuff on it! Thank you for sharing it with me.

Reply

Could you email me with a few pointers on how you made this website look this good , I would be appreciative.

Reply

Please message me with any pointers about how you made this website look like this, I'd be appreciative!

Reply

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading