Bu yazımda MVC'de Controller işlemlerinden bahsetmeye çalışacağım. Model - View - Controller üçlüsünün belki de en önemli noktası diyebiliriz. MVC ile oluşturduğumuz sistemde yapılan herşeyi kontrol ettiğimiz bir merkez olarak düşünebiliriz. Bu yazımda bu merkezde neyi nasıl yapabileceğimizden bahsedeceğim. Özellikle MVC'deki QueryString mantığını, Form işlemlerini nasıl gerçekleştirebileceğimizi ve View yönetimini ele alacağım. Bu yazımdan sonra MVC ile genel işlemleri nasıl yapabileceğimiz hakkında genel bir bilgi edinmiş olacağız. Şimdi sırayla Controller yönetme işlemlerimizi sırayla inceleyelim.
Öncelikle MVC'de sayfa olarak tanımlayabileceğimiz
".aspx" uzantılı olan View'lerin yönetimine bakalım. MVC projemizde View'ları oluşturduktan sonra erişim sağlamak ve bunları görüntüleyebilmek için Controller ile tanımlamamız gerekir. Bu işlem için aşğıdaki kodları inceleyebiliriz.
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["icerik"] = "İlk controller örneğimiz.";
return View();
}
public ActionResult Hakkimda()
{
ViewData["icerik"] = "Haber içeriği.";
return View();
}
}
Yazmış olduğumuz bu kodlar ile oluşturduğumuz View'ları (sayfaları ) tanımlamış oluyoruz. Yani burada View'lar için yazdığımız metotlara Asp.net'teki Page_Load eventı diyebiliriz. Bu metotlarda işlemler yaparak View'lara veri aktarımı yapabiliriz. Bu konudaki yazımı kısa sürede sizlerle paylaşacağım. Tanımlama işleminden sonra artık View'ları tanımladığımız Routes'lara uygun olarak istekte bulunup görüntüleyebiliriz.
Controller bölümünde View'ları kontrol ederken bazı değerlere ihtiyaç duyabiliriz. Bunlardan en sık kullanılanı ise QueryString yöntemi. MVC ile QuerytString kavramı oldukça kolay ve anlaşılır. Bunun için View'ları kontrol ettiğimiz metotlarda Routes'taki Url yapısına uygun olarak parametre değerleri girmeliyiz. Örnek olarak hemen aşağıdaki kodları inceleyebilirsiniz.
//Global.asax'ta tanımladığımız Routes'lar
routes.MapRoute("Default", "{controller}/{action}/{sayfa}", new { controller = "Home", action = "Index", sayfa = "" });
routes.MapRoute("Default2", "{controller}/{action}/{baslik}/{haber_id}", new { controller = "Home", action = "Index", baslik = "", haber_id = "" });
public class HomeController : Controller
{
public ActionResult Index(int? sayfa)
{
// url'de sayfa parametresi varsa alınır.
// sayfa paramtresine göre işlemler yapılır ve sonuçlar üretilir.
ViewData["icerik"] = "sayfaya göre verileri çektiğimiz içerik.";
return View();
}
public ActionResult Haber_Sayfasi(string baslik, int haber_id)
{
// url'de baslik ve haber_id değerlerini alıyoruz. Bu değerler url'de olmak zorunda.
// bu değerlere göre işlemler yapılır. Veritabanından bilgileri almak gibi.
ViewData["icerik"] = "Haber içeriği.";
return View();
}
}
Görüldüğü gibi Index View'ında
sayfa adında tanımlanan ve Url'den alınacak değeri belirtiyoruz. Parametre adının
Global.asax'ta tanımladığımız
Routes'a uygun olması zorunlu. Örnekte sayfa değeri için değişken sonra
"?" işareti gelmekte. Bu o değerin olsada olur olmasa da olurluğunu gösteriyor. Yani kendi bloğumdan örnek verecek olursam sayfalama yaptığım bölümlerde ilk sayfalarda sayfa parametre değeri olmaz. İlk sayfada sayfa parametresinin olmamasını da kontrol ediyorum ve bu değer yoksa sayfa parametre değerini 1 yapıyorum.
Diğer Controllerda ise yani
"Haber_Sayfasi" View'ını kontrol eden metotta alınması gereken 2 adet QueryString değeri bulunmakta ve bu değerler Url'de mutlaka olmak zorunda. Parametre isimlerini
Global.asax dosyamızda tanımladığımız
Routes'a uygun olarak veriyoruz. Bu şekilde QueryString mantığını MVC ile gerçekleştirebiliyoruz. QueryString ile aldığımız verilere göre işlemlerimizi yapıp sonuçlar elde edebiliriz ve bunları kullanıcıya sunabiliriz.
Controller bölümünde kontrol ettiğimiz en önemli işlemler Form işlemleri ve Formların sunucuya iletildiğinde yapılması gereken işlemler. MVC'de form yapısı Php'de ve klasik Asp'de olduğu gibi. Form'da bulunan textbox, textarea gibi değerleri alıp, işlem yapabilmek için aşağıda bulunan kodlardaki gibi kontroller yapabiliriz. Ayrıca Formların sunucuya iletilmesinde kullanılan method yöntemlerini de ayrı ayrı kontrol edebilmekteyiz. Aşağıdaki kodlarda örneği görebilirsiniz.
public class HomeController : Controller
{
public ActionResult Iletisim()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
[ValidateInput(true)]
public ActionResult Iletisim(string ad_soyad, string mesaj)
{
// bu metoda Post edilen her istekte sayfada bulunan id'si ad_soyad ve mesaj olan
// // elementlerin(input, textarea, vb..) değerleri alınır. Bu şekilde veri gönderimi yapabiliriz.
// // Veritabanına veri ekleme işlemlerinde veya güncelleme işlemlerinde bu yöntem kullanılır.
// [ValidateInput(true)] özelliği ile sayfadan post edilen verilerde html değer olamaz.
// Asp.net'teki ValidateRequest olayının aynısıdır. False yaparsak html veri gönderilebilir.
return View();
}
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Deneme(string deger)
{
// Get metodu ile bu metoda istekte bulunabiliriz.
// Get ile yapılan işlemlerde değerleri url'de görebiliriz.
// deger isimli değişken değerini url'den görebilir ve bu şekilde değişken değerini alabiliriz.
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Arama(string aranan)
{
// sayfada yer alan aranan id'li elementin değeri Post işlemi ile alınıyor.
// Alınan değer başka bir View'a veya metoda yönlendiriliyor.
return RedirectToAction("Arama_Sonuclari/Aranan/" + aranan, "Home");
// sonuçta gidilen adres "http://.... /Home/Arama_Sonuclari/Aranan/Aranan_Kelime" oluyor.
// "Arama_Sonuclari" adında tanımlayacağımız Controller metodu ile arana değeri alır ve işlemleri yaparak
// sonuçları kullanıcılara sunabiliriz.
}
}
Örnekte İletişim sayfasını ele aldım. Bu sayfada genelde iletişim formu kullanılır ve kullanıcılar bir takım değerler girerek karşı tarafa iletir. MVC ile bu olayı nasıl yapacağımızı anlatmak için bu örneği hazırladım. Sayfadaki herhangi bir kontrolün (textbox, textarea, vb.) değerini ise QueryString yönteminde olduğu gibi alabiliyoruz.
Controller bölümünde herhangi bir metoda yapılan istek sonrasında başka bir View'a veya metoda yönledirme yapmak için de örnek bir kod yazdım. RedirectToAction yöntemi ile MVC'de yönlendirme işlemi yapabiliyoruz. Bunu açıklamak için de arama mantığını örnek olarak verdim.
Ayrıca Controller bölümünde Formlardan gelen verileri kontrol de edebiliyoruz. Bu konuda ilerde yazı yazmaya çalışacağım. Ancak şimdi çok ihtiyaç duyulabilecek bir özelliği paylaşıyorum. Eğer formlardan gelen verilerde Html değer varsa ve html değerin olmasını veya olmamasını istiyorsak ValidateInput özelliğini kullanıyoruz. Bu Asp.net'teki ValidateRequest özelliği ile aynı.
Son olarak Ajax işlemleri için de Controller'da tanımlamalar yapabiliyoruz. Ancak bu tanımlamalar Form işlemlerini kontrol ettiğimiz metotlar ile aynı.
Buradaki gibi yazımda Ajax işlemleri için yazabileceğimiz Controller örneklerini görebilirsiniz.
Controller konusunda oldukça detaylı bir yazı oldu. Ancak MVC konusunda birçok kolaylık, ip ucu içerdiğini düşünüyorum. Umarım ilgilinenlere faydası olur.
İyi Çalışmalar.