Veysel Uğur KIZMAZ

Asp.Net MVC CodeBehind Tanımlama

16.06.2012Okunma Sayısı: 5682Kategori: ASP.NET MVC

 Bu makalemizde Asp.Net MVC ASPX View Engine ile MasterPage ve View’lara CodeBehind tanımlamanın nasıl yapıldığını inceleyeceğiz.

MVC standardında CodeBehind tanımlama bulunmamaktadrı fakat kodlamamızda ufak düzenlemeler yaparak istendiği taktirde bu işlemin gerçekleşmesine izin verilmektedir.
 
Bu işlemi bir örnek uygulama üzerinde gerçekleştirelim.
 
Yeni bir Asp.Net MVC 3 (Empty) Web Application oluşturalım.
 
Oluşturduğumuz projeye HomeController isminde bir controller sınıfı ekleyelim. Bu sınıfın 2 Action methodu olsun : Index, About
 
HomeController.cs
 
  1. public class HomeController : Controller
  2. {
  3.     public ActionResult Index()
  4.     {
  5.         return View();
  6.     }
  7.     public ActionResult About()
  8.     {
  9.         return View();
  10.     }
  11. }
 
Her iki Action’ın ASPX View Engine’ini kullanan viewlarını oluşturalım (Masterpage = Tema.Master)
 
 
Bu noktaya kadar farklı bir işlemimiz yoktu. Şimdi Shared klasörünün altına Tema.Master isminde MVC 3 View Master Page ekleyelim.
 
 
Tema.Master dosyamız oluştu. Şimdi bu sayfamızın en üst satırına göz atalım.
 
 
  1. <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
Code Inherits’te ViewMasterPage sınıfını kabul etmiştir. Şimdi kendi Tema.Master.cs sınıfımızı Class klasörünün altında oluşturalım. (Classs klasörümüz yoksa önce klasörü oluşturalım)
 
Tema.Master.cs
 
  1. namespace MVC3ViewCodeBehind.Class
  2. {
  3.     public class Tema : ViewMasterPage
  4.     {
  5.         protected void Page_Load(object sender, EventArgs e)
  6.         {
  7.             ViewBag.Isim = "Veysel Uğur KIZMAZ";
  8.         }
  9.     }
  10. }
 
Bu sınıfın MasterPage View’ının sınıfı olmasını kalıtımı aldığı ViewMasterPage sınıfı sayesinde belirliyoruz.
Şimdi Tema.Master sayfamızın üst satırındaki kodda Inherits kısmına bu sınıfı refernas gösterlim.
 
 
  1. <%@ Master Language="C#" Inherits="MVC3ViewCodeBehind.Class.Tema" %>
Şimdi Tema.Master dosyamızda ViewBag’de gönderidğimiz veriyi gösterelim.
 
Tema.Master
 
  1. <%@ Master Language="C#" Inherits="MVC3ViewCodeBehind.Class.Tema" %>
  2.  
  3. <!DOCTYPE html>
  4.  
  5. <html>
  6. <head runat="server">
  7.     <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
  8. </head>
  9. <body>
  10.     <div>
  11.         <%=ViewBag.Isim %>
  12.     </div>
  13.     <div>
  14.         <asp:ContentPlaceHolder ID="MainContent" runat="server">
  15.        
  16.         </asp:ContentPlaceHolder>
  17.     </div>
  18. </body>
  19. </html>
Daha önce oluşturduğumuz Index View’ının kodunu da inceleyelim.
 
 
  1. <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Tema.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
  2.  
  3. <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
  4.     Index
  5. </asp:Content>
  6.  
  7. <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  8.  
  9. <h2>Index</h2>
  10.  
  11. </asp:Content>
 
Şimdi projemizi çalıştıralım.
 
 
MasterPage’de çalıştırdığımız kodumuzun sonucu da ekranda göründü.
 
Şimdi benzer işlemi masterpage için değil, herhangi bir View için gerçekleştirelim.
 
About View’ının CodeBehind’ına bir sınıf ekleyelim. Bunun için Class klasörü altında About.cs sınıfı oluşturalım ve kodunu aşağıdaki gibi düzenleyelim.
 
About.cs
 
  1. namespace MVC3ViewCodeBehind.Class
  2. {
  3.     public class About : ViewPage
  4.     {
  5.         protected void Page_Load(object sender, EventArgs e)
  6.         {
  7.             ViewBag.Sayfa = "Hakkımızda";
  8.         }
  9.     }
  10. }
Bu sınıfın, View Code Behind olduğunu ViewPage kalıtımı sayesinde belirtiyoruz.
 
Şimdi About.aspx sayfamıza gidelim ve bu sınıfın kendi CodeBehind’ı olduğunu tanıtalım.
 
 
  1. <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Tema.Master" Inherits="MVC3ViewCodeBehind.Class.About" %>
  2.  
  3. <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
  4.     About
  5. </asp:Content>
  6.  
  7. <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  8.  
  9. <h2><%=ViewBag.Sayfa %></h2>
  10.  
  11. </asp:Content>
 
Projemizi çalıştıralm.
 
 
Son oalrak, About.cs sınıfımızdan, daha önce değeri atanmış olan ViewBag.Isim değişkenimizin değerini değiştirelim ve değerini ekranda gösterelim.
 
About.cs
 
  1. public class About : ViewPage
  2. {
  3.     protected void Page_Load(object sender, EventArgs e)
  4.     {
  5.         ViewBag.Sayfa = "Hakkımızda";
  6.         ViewBag.Isim = "Uğur";
  7.     }
  8. }
 
About.aspx
 
  1. <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Tema.Master" Inherits="MVC3ViewCodeBehind.Class.About" %>
  2.  
  3. <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
  4.     About
  5. </asp:Content>
  6.  
  7. <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
  8.  
  9. <h2><%=ViewBag.Sayfa %></h2>
  10. <br />
  11. <h2><%=ViewBag.Isim %></h2>
  12.  
  13. </asp:Content>
 
Projemizi çalıştıralım.
 
 
Göründüğü üzere, MasterPage’de atanan değer sayfalarda DEĞİŞMEMEKTEDİR.
 
 
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com