|
Asp.Net MVC Framework - Controller ve Action Kavramı |
|
Gönderiliyor lütfen bekleyin... |
|
|
Asp.Net MVC Framework web projesi şablonunu incelerken başlattığımız yazı dizimize Controller katmanına daha detaylı değinerek devam ediyor olacağız.
MVC Framework ‘te en önemli parçalarından biride Controller ‘dır. MVC patterninde son kullanıcılar tarafında yapılan istekler doğrultusunda route map yardımıyla gerekli controller sınıfına yönlendirerek işlemleri gerçekleştirmeye başlatır. Controller üzerinde modelle ilişkili olarak veri tabanı işlemleri, yönlendirme işlemleri, hesap işlemleri gibi bir web sitesi için en temel işlemlerin yapıldığı katmandır.
Controller ‘ı Anlamak
Asp.Net MVC ‘ de kullanıcılar tarafında gelen istekleri alan işleyen ve geri ileten katman olarak tanımlayabiliriz. İnternet tarayıcısında parçalı olarak her controller için ayrı bir istek yapılır. Ufak bir örnek adres üzerinden değinmek gerekirse;
http://localhost/Urun/Index/7 başarılı bir gösterim olabilir.
Controller adı adres çubuğunda Urun olarak geçmektedir. Bu Controllers\ klasörünün alt dizininde yer alan UrunController.cs sınıfından gelmektedir. Bu sınıf gelen isteklere karşı gerekli sonuçları döndürmek için kullanılmaktadır. Controller ların bir diğer özelliği ise yapılan bir işlem sonrasında işlenecek daha parçalar var ise başka bir controller sınıfına aktarmaktadır.
Basit olarak UrunController.cs sınıfına göz atalım;
Controller\UrunController.cs
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
namespace MvcApplication1.Controllers
{
public class UrunController : Controller
{
//
// GET: /Urun/
public ActionResult Index()
{
// Add action logic here
return View();
}
}
} |
Harici olarak oluşturulan controller sınıfları System.Web.Mvc.Controller sınıfı miraslanarak oluşturulmaktadır. Ayrıca controller sınıflarında oluşturulan metotlarda en çok dikkatimizi çeken Action kullanımıdır.
Action ‘ı Anlamak
Controller sınıflarını daha da işlevsel kılan Action kullanımıdır. Son kullanıcıdan gelen istek doğrultusunda hangi işlemi yapacağını belirtilen controller sınıfında yer alan metodlar yani action ‘lar yapmaktadır.
http://localhost/Urun/Index/7 adres çubuğunda Urun kontrollerken Index/7 belirtilen meto da 7 parametresine göre işlem yapması anlamına gelmektedir.
Controller ‘ı incelerken vermiş olduğumuz kod bloğunu örnek olarak kullanırsak, UrunController sınıfında yer alan Index() metodunu action ‘dır. Action public metot olmalıdır. C# metodları varsayılan olarak private oluşturulmaktadır. Bu sebepten ötürü action metotlarının public olarak belirtilmesi gerekmektedir.
Action metotlarının aşırı yüklenmesi kabul gören bir kullanım biçimi değildir. Action özellikle daha özelleştirilmiş kullanıma odaklandığı için benzer metot isimleri ile birden fazla işlem yapılması çalışma zamanında sorunlara sebep olabilmektedir.
Action Result ‘ı Anlamak
Controller da kullanılan action lar action result ile geri dönüşleri vardır.
1. ViewResult: HTML ve Markup sunar (Represent).
2. EmptyResult: Sunumu sonlandırır.
3. RedirectResult: Sunulan linki yeni bir adrese yönlendirmeye yarar
4. JsonResult: Java Script Object ‘leri Ajax ile birlikte kullanılabilir bir duruma getirir.
5. JavaScriptResult: Java Script leri sayfada kullanılabilir biçimde sunar.
6. ContentResult: Metin içeriği sunar.
7. FileContentResult: İndirilebilir dosyaları sunar (Binary içerik ile).
8. FilePathResult: İndirilebilir dosyaları sunar (Dosya yolu ile).
9. FileStreamResult: İndirilebilir dosyaları sunar (Stream dosyalar için).
View result kullanılarak hazırlanmış bir metoda göz atalım.
Controller\KitapController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class KitapController : Controller
{
public ActionResult Index()
{
return View();
}
}
} |
Action sonucunda ViewResult ile HTML view ‘e dönecektir. Index() metodunda view adına göre geri dönüşü yapacaktır.
ViewResult() ve View() metotları Controller sınıfında türetilerek oluşturulmuştur. Controller ‘ın temel sınıfları;
1. View: Action sonucunda ViewResult ‘a yönlendirilir.
2. Redirect: Action sonucunda RedirectResult ‘a yönlendirilir.
3. RedirectToAction: Action sonucundan RedirectToRouteResult ‘a yönlendirilir (action yardımıyla yönlendirilir).
4. RedirectToRoute: Action sonucunda RedirectToRouteResult ‘a yönlendirilir (route yardımıyla yönlendirilir).
5. Json: JsonResult döndürür.
6. JavaScriptResult: JavaScriptResult döndürür.
7. Content: Action işlemi sonucunda ActionResult döndürür.
İnternet tarayıcılarında Controller üzerinde action çağırıldığında View() metodu kullanılmaktadır. Kullanılan bir diğer Action metodu ise RedirectToAction ‘dır. Bu metot yapılan işlemler doğrultusunda geri dönülmesi gerekiyorsa kullanılmaktadır.
Eğer ki Details metodunda ki id parametresine gelen değer HasValue ‘dan farklıysa bizim belirttiğimiz bir view HTML sayfaya yönlendirilmesini talep eden bir controller sınıfı hazırlayalım.
Controller\KullaniciController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class KullaniciController : Controller
{
public ActionResult Details(int? id)
{
if (!id.HasValue)
return RedirectToAction("Index");
return View();
}
public ActionResult Index()
{
return View();
}
}
} |
Şimdi vereceğimiz örnek ise içeriklerin gösterimi ile ilgili. Index metodunda ContentResult metodunu kullanarak belirtilen içerisi göstermektedir.
Controller\DurumController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class DurumController : Controller
{
public ActionResult Index()
{
return Content("Merhaba Dunya!!!");
}
}
} |
İçeriği ContentResult metodu da bizim girebilmemiz dışında oluşturulan metotların geri dönüş değerlerine göre de otomatik olarak belirtilebilmesi mümkündür.
Controller\IsController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class IsController : Controller
{
public DateTime Index()
{
return DateTime.Now;
}
}
} |
Index() metodunda action olarak DateTime nesnesini geri dönüş değeri almaktadır. İnternet tarayıcısında DateTime ‘ın geri dönüş değeri metin olarak View sayfada gösterilmektedir.
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
[email protected]
http://turhal.blogspot.com
Makale:
Asp.Net MVC Framework - Controller ve Action Kavramı ASP.NET Turhal Temizer
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|