mehmetduran.com - Paylaşmak Güzeldir...
Asp.net MVC'de View ve MasterPage için CodeBehind Tanımlama
Bu yazımda MVC'de yer alan View ve MasterPage için Codebehind tanımlamayı ve kullanmayı göstermeye çalışacağım. MVC projesi oluşturup, projeye MVC View ve MVC MasterPage eklediğimizde sadece sayfalar eklenir. Asp.net'te olduğu gibi kod sayfası gelmez. Ancak bu yazımda bu kod sayfasını kendimiz oluşturup View'larda ve Masterpage'de yazdığımız classları nasıl kullanacağımızı göstereceğim. Böylece MVC projelerimizde tıpkı Asp.net'te olduğu gibi kod sayfalarını kullanıp kodlamalarımızı yapabileceğiz. Ayrıca kontroller için tüm eventları tanımlayıp kullanabiliyoruz, View (sayfa) için özel fonksiyonlar tanımlayıp kullanabileceğiz. Ancak button_click veya data kontrollerinin eventları gibi işlemleri MVC ile kontrol etmek MVC mantığına ters. Codebehind tanımlama ve kullanma işlemini event yönetimi için kullanmamalıyız. Bu yöntemi veri yükleme ve kodlamalarımızı kod sayafasında yapmak için tercih etmeliyiz.

Öncelikle MVC projesinde View dediğimiz yani oluşturduğumuz bir sayfa için CodeBehind tanımlaya bakalım. View'lar System.Web.Mvc altında yer alan ViewPage class'ından türerler. Kendi yazdığımız View'ı kontrol edecek olan class'ta ViewPage sınıfından inherit (miras) olmalı.  View için yazdığımız örnek kodlarımız ve kullanımı şu şekilde olmalı.

 
  // Server taraflı kodlarımız ve tanımladığımız class'ımız
  namespace mvc_proje.Models
  {
    public partial class sayfa : System.Web.Mvc.ViewPage
    {
      protected void Page_Load(object sender, EventArgs e)
      {
        Response.Write("View için Page_Load eventı çalıştı.");
      }
 
      // Burada tüm eventları tanımlayıp kontrol edebiliriz. (Buttonclick, vb.)
      // Ancak MVC mantığına ters.
      // Sadece page_load eventı gibi eventları kullanmak
      // veya metot tanımlayıp kullanmak mantıklı.
    }
  }
 
 
  // View'ın Html bölümünde şu şekilde yazdığımız class'ı bildiriyoruz.
  <%@ Page Language="C#" Inherits="mvc_proje.Models.sayfa" %>
 

Bu şekilde View için yani sayfa için Page_Load eventı gibi eventları (Asp.net sayfasında yer alan tüm eventları) kullanabiliyoruz. Hatta button veya diğer kontrollerin de eventlarını kontrol edebiliyoruz. Ancak bunu MVC ile yapmak MVC mantığına ters. Eğer kontrollerin eventlarını MVC ile kontrol edeceksek Asp.net'te olduğu gibi bu kontrolleri form tagı arasına (runat=server özelliği olan formun arasına) koymalıyız. Bunun yanında eventları kontrol ettiğimiz için ViewState açılmış oluyor. Yani MVC mantığıyla uyuşmayan bir iş yapmış oluyoruz. Bunun için CodeBehind tanımlama ve kullanma işini sadece sayfaların Page_Load eventı veya sayfaya ait özel metotları tanımlayıp kullanmak için tercih etmeliyiz. Buton veya diğer kontrollerin eventlarını MVC'deki Controller ile yönetmeliyiz.

View dışında MasterPage için de CodeBehind tanımlayıp kullanabiliyoruz. MVC'de MasterPage'ler System.Web.Mvc altında yer alan ViewMasterPage sınıfından türerler. Bizim MasterPage için yazacağımız class'ta ViewMasterPage sınıfından inherit (miras) olmalı. Aşağıda MasterPage için yazdığımız class'ı ve bu class'ı kullanmayı görebilirsiniz.

 
  // Server taraflı kodlarımız ve tanımladığımız class'ımız
  namespace mvc_proje.Models
  {
    public partial class master : System.Web.Mvc.ViewMasterPage
    {
      protected void Page_Load(object sender, EventArgs e)
      {
        Response.Write("MasterPage için Page_Load eventı çalıştı.");
      }
    }
  }
 
 
  // MasterPage'in Html bölümünde şu şekilde yazdığımız class'ı bildiriyoruz.
  <%@ Master Language="C#" Inherits="mvc_proje.Models.master" %>
 

Bu şekilde de MasterPage için CodeBehind tanımlayıp kullanabiliyoruz.

MVC ile hazırladığım kendi bloğumda masterpage için kolay kodlama yapabilmek için bu şekilde kendi class'larımı yazdım. View'larda ise sadece sitemap, rss gibi sayfalar için class tanımlayıp kullandım. Bu türlü işlemler için veya Html bölümde server taraflı kodlama yapmayı sevmeyenler için CodeBehind tanımlama ve kullanma yöntemi oldukça güzel bir yöntem. Ancak kontrollerin eventları için CodeBehind kullanmamalıyız. (Kontrollerin eventlarını Controller'de kontrol etmeliyiz.)

Bu şekilde hem View'da hem de MasterPage'de kodlamalar gerçekleştirebiliriz. Daha önce bu konuyla ilgili soru soran arkadaşlara ve MVC ile ilgilenen arkadaşlara faydalı olacağını umut ediyorum.

Önemli Not : MVC projemizde View ve MasterPage için tanımlayıp kullandığımız class'larda Visual Studio'nun bir Bug'ı (hatası) var. Sizler de farkedeceksinizki kendi yazdığımız View veya MasterPage'e yüklediğimiz class'ta sayfada bulunan kontroller Intellisense ile gözükmüyor. Ayrıca kontrol ID'lerini el ile yazıp işlemleri tanımladıktan sonra Build işlemini yapınca Visual Studio hata veriyor. Ancak yaptığımız herşey doğru ve sorunsuzca çalışmakta. Bu Visual Studio'nun bir Bug'ı. Bu problemi sadece MVC projesinde değil Asp.net projesinde de yaşadım. Belki güncelleştirmeler ile bu Bug giderilmiş olabilir. Projemizi hataya rağmen çalıştırdığımızda çalıştığını görebiliriz.

İyi Çalışmalar.
Bookmark and Share
Bu Yazıyı Değerlendirin.
Konuyla İlgili Olabilecek Diğer Yazılar Jquery ile Tek Tek Kayan Alan Oluşturma ve Ajax ile Rss Okuma Örneği Learning Asp.net 3.5 (E-Book) Asp.net MVC (Model View Controller) - Giriş Bloğumda ve Projelerimde Kullandığım RSS Sınıfı Visual Studio 2005 - 2008 Klavye Tuş Bilgileri
Yorumlar
Yorum Yaz
RSS Yorum Takibi
Mazhar KAYAOĞLU 27 Temmuz Pazartesi 2009 12:54 #1
Elimizde 10 Milyon satırlık veri var.Verileri sektör gruplarına göre ayırıp her sektörde kaç kişinin olduğunu bulmaya çalışıyoruz.Ama bunu yaparken epey bir süre geçiyor ve timeout hatası oluşuyor.Burdaki sorun verilerin hepsinin aynı tabloda olma gerekliliği.Bunun için ne yapmalıyız.Yardımların için teşekkürler.(MSSQl SERVER kullanılıyor.)
Mehmet Duran 27 Temmuz Pazartesi 2009 23:56 #2
Bu konuda bir fikrim yok ancak bu konuda bilgili arkadaşlarıma danışacağım. Eğer sonuç alırsam buradan yorum olarak paylaşırım.
Mazhar KAYAOĞLU 28 Temmuz Salı 2009 13:39 #3
Hocam ilgin için teşekkürler.
İsim :
Site :
Yorum :

Buradan bu yazıya ait yorumları RSS olarak takip edebilirsiniz.

Bu servis ile yazılara eklenen yorumları RSS ile takip ederek konu ile ilgili başkaları tarafından yapılan yorumları veya konuyla ilgili sorduğunuz sorulara verilen cevapları görebilirsiniz.
Büyük işler gibi, büyük düşüncelerinde davula ihtiyaçları yoktur.
Bölümler
Yazılar
Arşiv
Arama
Linkler
Site İçi Arama
Son Zamanlarda Ne Yapıyorum ?
İstatistikler - Araçlar - Reklam
İstatistikler
Sayaç
Mehmet Duran | mehmetduran.com | Copyright © 2009