Veysel Uğur KIZMAZ

Asp.Net MVC 3 Razor View Engine Giriş

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

Asp.Net’in gelişmesi ile birlikte ileri seviye bir dil oldu. Microsoft daha basite indirgemek için yeni bir framework oluşturmaktadır : Asp.Net Web Pages. Kodlaması PHP gibi HTML ile serverside kodlar birarada bulunmaktadır. Yeni başlayanlar için güzel bir başlangıç sağlayacaktır.

Peki Asp.Net Web Pages’in klasik Asp.Net’ten en büyük farkı ne dediğimizde dikkatimizi çeken en büyük nokta, aspx sayfalarının yerini C# için cshtml, VB.Net için vbhtml dosyalarıdır. Codebehind OLMAKSIZIN tek dosya içinde hem clientside hem serverside işlemler gerçekleştiriliyor. Bu yapının ismine Razor (View Engine) diyoruz.
 
Serverside kodları yineC# ya da VB.Net kullanılıyor. Sadece serverside kodlarımızı Razor’un kendi Syntax’ına uygun yazmamız isteniyor.
 
Razor, MVC 3’ün varsayılan View Engine’ı olduğu için MVC’de çok önemli bir yere sahiptir.
 
MVC3’te Razor View Engine’i bir örnek uygulama üzerinde inceleyelim. Visual Studio 2010’da yeni bir ASP.NET MVC 3 Web Application oluşturalmı.
 
Oluşturduğumuz projenin View engine’ini Razor seçelim ve Empty bir MVC3 projesi oluşturalım.
 
 
 
Projemizi oluşturduk.Empty MVC 3 Web Application oluşturduğumuzda Solution Explorer’ın görüntüsü aşağıdaki gibi olacaktır.
 
 
Description: C:\Users\ugur\Desktop\Makale 2011 04 25\Asp_Net_MVC_Razor_Nedir\Asp_Net_MVC_Razor_Nedir_4.jpg
 
Empty MVC 3 uygulamasında Shared klasörünün içinde 2 tane cshtml dosyası görüyoruz.
 
1.       _Layout.cshtml : MasterPage’imiz
 
2.       Errror.cshtml : Hatayla karşılaşıldığında görünecek sayfa
 
Bu iki sayfanın kodlarına göz atalım.
 
_Layout.cshtml
 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <title>@ViewBag.Title</title>
  5.     <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
  6.     <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
  7. </head>
  8.  
  9. <body>
  10.     @RenderBody()
  11. </body>
  12. </html>
 
Error.cshtml
 
  1. @{
  2.     Layout = null;
  3. }
  4.  
  5. <!DOCTYPE html>
  6. <html>
  7. <head>
  8.     <title>Error</title>
  9. </head>
  10. <body>
  11.     <h2>
  12.         Sorry, an error occurred while processing your request.
  13.     </h2>
  14. </body>
  15. </html>
 
Viiews klasörünün altında _ViewStart.cshtml dosyası da yer almaktadır. Projemiz çalıştığında ilk çalışan cshtml dosyamız burasıdır. Layout parametresi olarak belirlediği, hangi sayfanın MasterPage olacağıdır.
 
_ViewStart.cshtml
 
  1. @{
  2.     Layout = "~/Views/Shared/_Layout.cshtml";
  3. }
 
Uygulamamıza kaldığımız yerden devam edelim. Projemizde Controller’a sağ tıklayalım Add->Controller ile yeni bir controller ekleyelim.
 
 
Controller’ımızın ismi RazorController olsun.
 
 
 
Add butonuna tıklayalım ve Controller’ı oluşturalım. Index() methodumuza sağ tıklayıp Add View diyelim ve Razor/Index.cshtml dosyamızı (View’ımızı) oluşturalım.
 
 
 
Add View dedikten sonra View’ımızın yapılandırmasını yapacağımız ekran açıldı. Burada dikkat etmemiz gereken en önemli nokta, View engine seçeneğinde hem Razor hem ASPX’in yer almasıdır. Bu da MVC 3 web uygulamamızda başlangıçta hangi View Engine’i seçersek seçelim proje içerisinde her iki view engine’i de kullanabiliyoruz (ASPX ve Razor).
 
 
Index.cshtml dosyamız, Razor klasörünün altında oluştu. Şimdi Index dosyamıza göz atalım.
 
Index.cshtml
 
  1. @{
  2.     ViewBag.Title = "Index";
  3. }
  4.  
  5. <h2>Index</h2>
 
Dikkat ederseniz ASPX’teki <% %> yerine @{} yazımı bulunmaktadır. Razor View Engine’in yazım kuralının temelinde @ sembolü yatmaktadır. Razor Syntax’ına sonraki makalelerimizde daha detaylı değineceğiz.
 
Şimdi ekranda server tarafından aldığımız bazı verileri yazdıralım. Bunun için RazorController.cs’ye gidelim ve Index() methodumuzun kodunu şu şekilde düzenleyelim.
 
RazorController.cs
 
  1. public ActionResult Index()
  2. {
  3.     ViewBag.Yazar = "Veysel Uğur KIZMAZ";
  4.     ViewBag.MakaleSayisi = 105;
  5.  
  6.     return View();
  7. }
 
Şimdi Razor/Index.cshtml dosyamıza gidelim ve buradaki kodumuzu aşağıdaki gibi düzenleyelim.
 
Index.cshtml
 
  1. @{
  2.     ViewBag.Title = "Başlık";
  3. }
  4.  
  5. @{
  6.     <h1>@ViewBag.Yazar</h1>
  7.     <br />
  8.     <h3>Makale Sayısı : @ViewBag.MakaleSayisi</h3>
  9. }
 
ASPX’te bir değişken değerini yazdırmak için <%= %> kullanıyorduk. Burada değişkenimziin başına @ yazarak benzer işlemi gerçekleştiriyoruz.
 
Projemizi çalıştıralım ve Razor/Index linkine gidelim (http://localhost:xxxx/Razor/Index)
 
 
 
Veysel Uğur KIZMAZ
Bilgisayar Mühendisi
veysel@ugurkizmaz.com
www.ugurkizmaz.com