Makale Özeti

Bu yazımızda MVC Framework 'ün temel yapı taşlarından Controller katmanını detaylı bir şekilde incelemeye çalışıyoruz.

Makale

Controller Oluşturuyoruz…

Asp.Net MVC Framework ‘te Controllerları nerelerden nasıl ekleyebileceğimize ve detaylarını inceleyerek yazımıza devam ediyoruz. Bu işlemlerimizi Visual Studio geliştirme ortamı üzerinde örneklerimizi yapıyor olacağız.

Menü üzerinde Projeye Menü Eklenmesi

MVC Framework web projesi şablonu ile oluşturulmuş proje üzerinde yeni bir controller sınıfı eklemek için Controllers klasörünün üzerinde fare ile sağ tıklama ile Add->New -> Controller yolunu izleyerek ekleyebilmemiz mümkündür.



Sonrasında karşımıza controllerin adını gireceğimiz bir ekran çıkmaktadır.



Controller\PersonelController.cs
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class PersonelController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

Action Metotunun İskeleti

Biraz önce anlattığımız gibi kolay bir şekilde controller sınıfı ekleyebilmemiz mümkündür. Anlattığımız temel işlemlerin dışında bir de Create, Update ve Details Action metotlarını da basitçe ekleyebilmemiz mümkündür. Sadece yapmamız gereken Controller adını verdiğimiz ekranda senaryolarında oluşmasını isteyip istemediğimizi soran bölüme onay vermek olacaktır.



Seçeneği onaylayığ UrunController sınıfını ekle dediğimizde aşağıdaki sınıfı bize Visual Studio otomatik olarak oluşturmaktadır.

Controller\UrunController.cs
using System.Web.Mvc;
using System.Web.Mvc.Ajax;

namespace MvcApplication1.Controllers
{
    public class UrunController : Controller
    {
        //
        // GET: /Urun/

        public ActionResult Index()
        {
            return View();
         }

         //
         // GET: /Urun/Details/5

         public ActionResult Details(int id)
         {
             return View();
         }

         //
         // GET: /Urun/Create

         public ActionResult Create()
         {
             return View();
         }

         //
         // POST: /Urun/Create

         [AcceptVerbs(HttpVerbs.Post)]
         public ActionResult Create(FormCollection collection)
         {
             try
             {
                   // TODO: Add insert logic here

                  return RedirectToAction("Index");
              }
              catch
              {
                  return View();
              }
          }

          //
          // GET: /Urun/Edit/5

          public ActionResult Edit(int id)
          {
               return View();
           }

           //
           // POST: /Urun/Edit/5

          [AcceptVerbs(HttpVerbs.Post)]
          public ActionResult Edit(int id, FormCollection collection)
          {
              try
              {
                   // TODO: Add update logic here

                   return RedirectToAction("Index");
              }
              catch
              {
                     return View();
               }
          }
     }
}

Oluşturulan sınıf yardımıyla Index, Details, Update, Edit gibi temel veri tabanı işlemleri daha hızlı hazırlayabilmemize olanak tanır.

Controller Sınıfı Oluşturmak

Şu ana kadar sürekli olarak ya daha önceden oluşturulmuş olan controller sınıflarını inceledik ya da Visual Studio yardımıyla kolayca oluşturduk. Şimdi ise boş bir sınıf oluşturarak kendimiz bir controller sınıfı nasıl oluşturabileceğimizi incelemeye çalışalım.

Visual Studio ‘da controllers sınıfına sınıfımızı el ile ekliyoruz. Şimdi yapacağımız adımlara bir göz atalım.

1. Controllers klasörüne bir sınıf ekliyoruz.
2. Eklemiz olduğumuz sınıfın adı muhakkak Controller ile bitmelidir.
3. Sınıfı düzenlerken System.Web.Mvc.Controller ile miraslaşması gerekmektedir.

Bu işlemleri tamamladığımızda kendimiz sorunsuzca bir controller sınıfı oluşturmuş oluruz.



Controller\YaziController.cs
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class YaziController : Controller
    {
        public string Index()
        {
            return "Merhaba Dunya!!!";
        }
    }
}

Index() metodunu internet tarayıcısı üzerinde çağırmak istediğimizde http://localhost:40700/yazi adresini belirtmeniz yeterli olacaktır. Bize Merhaba Dünya!!! Sonucunu döndürecektir.

Not: localhost:40700 ‘deki 40700 port numarasıdır. Bu numara her yeni bir Asp.Net Development Server oluşturulduğunda birbirinden farklı bir biçimde oluşturulabilir. Eğer değişmesini istemiyorsanız projenin özelliklerinden statik olmasını sağlar ya da web sayfanızı localhost altına alıp hiç port numarasına gerek kalmadan kullanabilirsiniz.

Action Oluşturuyoruz…

Yazımız boyunca controller sınıflarının ne işe yaradığını detaylı bir şekilde öğrendik. Şimdi ise yeni bir controller action nasıl oluşturulur, özellikleri nelerdir incelmeye çalışıyor olacağız.

Controller sınıfları içerisinden gelen istekler doğrultusunda işlemler action metotları ile gerçekleştirilir. Şimdi action metotlarının nasıl oluşturulabildiğini incelemeye çalışalım.

Controller Action Ekliyoruz…

HomeController sınıfının içerisine Index() action metodunun dışında birde MerhabaDe() action metodunu oluşturuyoruz. Şimdi bu değişikliği hemen yapalım. J

Controller\HomeController.cs
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public string MerhabaDe()
        {
            return "Merhaba";
        }
    }
}

Action metot oluştururken dikkat etmemiz gereken kriterler aşağıdaki gibidir.

• Bu metot public(genel) olmalıdır .
• Metot statik olamaz.
• Metodun bir uzantısı olamaz.
• Metoda ilişkin bir yapıcı, alıcı ya da verici olamaz
• Metotta açık genel türleri olamaz.
• Bu metot controller temel alınarak hazırlanmış bir metot değildir.
• Metot parametreleri Ref veya out içeremez.

Controller action metotları geri dönüş değerleri olarak string, DateTime gibi tipleri alabilirler. Asp.Net MVC Framework string olmayan bir action metot parametresini tarayıcı tarafında string değer gönderildiği durumlarda dönüştürme işlemini yapamaz ve hata mesajı verir.

Action metotlarda kullanılacak parametrelerde boş değer de gelme olasılığını düşünerek tipler nullable olarak belirlenir.

Genel bir action metodu oluşturalım. Fakat bu oluşturma işleminde bu metoda action değilsin diyerek bir de çelişkiye sebep olduralım. Bu durumda controller ı ve action adının çağırdığımız durumda bize nasıl bir tepki vereceğine hep bir birlikte bir göz atalım.

Controller\SirketController.cs
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [NoAction]
    public class SirketController : Controller
    {
        public string SirketSirri()
        {
            return "Bu bilgi şirket sırrıdır.";
        }
    }
}

İnternet tarayıcımızda Sirket/SirketSirri yazarak action metodumuzu çağırdığımızda nasıl bir tepki ile karşılaşacağımıza göz atalım.

Gördüğünüz üzere Sirket controlleri ve SirketSirri() metodu olduğu halde bize isteğiniz bulunamamaktadır gibi hata mesajı vermektedir. Bunun sebebi Action metodumuzun başına sen action değilsin dememizden kaynaklanmaktadır.

Bir yazımızın daha sonuna geldik. Bu yazımızı da Controller sınıflarını ve action metotlarını detaylı bir biçimde incelemeye çalıştık.

Herkese mutlu günler diliyorum.

Turhal Temizer
info@turhaltemizer.com
http://turhal.blogspot.com