﻿
{"id":1437,"date":"2013-03-01T00:04:07","date_gmt":"2013-03-01T00:04:07","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=1437"},"modified":"2013-03-01T19:49:29","modified_gmt":"2013-03-01T19:49:29","slug":"asp-net-mvc-4-0-razor-view-engine","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-mvc-4-0-razor-view-engine\/","title":{"rendered":"Asp.NET MVC 4.0 Razor View Engine"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Asp.NET MVC 3 s\u00fcr\u00fcm\u00fc itibaren gelen ve MVC 4.0 s\u00fcr\u00fcm\u00fcnde de ge\u00e7erli olan &#8220;View Engine&#8221; yap\u0131s\u0131, &#8220;Server Side&#8221; yani sunucu tarafl\u0131 kodlama yap\u0131s\u0131yla, &#8220;Client Side&#8221; dedi\u011fimiz kullan\u0131c\u0131 tarafl\u0131 kodlamay\u0131 birle\u015ftiren bir teknolojidir.Uzun laf\u0131n k\u0131sas\u0131, web programlama alan\u0131nda HTML taglar\u0131 aras\u0131nda, programatik i\u015flemleri yapmam\u0131z\u0131 sa\u011flayan MVC mimarisinin bir \u00fcr\u00fcn\u00fcd\u00fcr.Bu makalemizde, Asp.NET MVC 4.0 versiyonunda, Razor View Engine incelemesi yapaca\u011f\u0131z.<br \/>\n<!--more--><br \/>\n<span style=\"font-size: large;\"><em><strong>Razor<\/strong><\/em><\/span><br \/>\nMicrosoft taraf\u0131ndan MVC 3 versiyonunda geli\u015ftirilmi\u015f ve MVC 4 versiyonunda mevcut bulunan bir teknolojidir.Amac\u0131 yukar\u0131da bahsetti\u011fimiz gibi, web sayfalar\u0131na programatik kodlar\u0131 g\u00f6mmek i\u00e7in olu\u015fturulmu\u015f bir yap\u0131ya sahip.<\/p>\n<p>Razor teknolojisinin derlenme i\u015fleyi\u015finden bahsedersek e\u011fer, kullan\u0131c\u0131 taraf\u0131ndan bir sayfa talebi geldi\u011fi zaman, \u00f6nce o sayfadaki Server Side(Sunucu tarafl\u0131) kodlar \u00e7al\u0131\u015facak, ard\u0131ndan Client Side(Kullan\u0131c\u0131 tarafl\u0131) kodlar \u00e7al\u0131\u015facakt\u0131r.Sunucu tarafl\u0131 kodlarda istedi\u011finiz her t\u00fcrl\u00fc programatik i\u015flevi ger\u00e7ekle\u015ftirebilirsiniz.<\/p>\n<p>Razor teknolojisinin hedefi ise, az kodla \u00e7ok i\u015f yapmakt\u0131r.En g\u00fczel \u00f6zelliklerinden biriside HTML kodlar\u0131n\u0131n sunucu tarafl\u0131 kodlar\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 scopelar i\u00e7erisinde de tan\u0131mlanmas\u0131d\u0131r.<\/p>\n<p>Tabi ki de C# ve VB gibi programlama dillerini d\u00f6rt d\u00f6rtl\u00fck bir uyum i\u00e7inde desteklemektedir.<\/p>\n<p>Bir programc\u0131 i\u00e7in en az \u00f6nemli olan ama benim i\u00e7in MVC&#8217;nin en \u00e7ekici noktas\u0131 olan yan\u0131 da, projedeki kullan\u0131lan View katman\u0131ndaki sayfalar olsun, Master Page yap\u0131s\u0131nda ki Layout sayfas\u0131 olsun ya da User Control mant\u0131\u011f\u0131nda \u00e7al\u0131\u015fan Partial View&#8217;ler olsun hepsinin uzant\u0131s\u0131 &#8220;.aspx&#8221; de\u011fil, &#8220;.cshtml&#8221; dir. \ud83d\ude42 Tabi VB programc\u0131lar\u0131 i\u00e7in ise, &#8220;.vbhtml&#8221;..<br \/>\n<strong>&#8220;@&#8221; Operat\u00f6r\u00fc<\/strong><em><br \/>\nHat\u0131rlarsan\u0131z e\u011fer, Asp.NET MVC 2.0 versiyonuyla ilgili yazd\u0131\u011f\u0131m makalelerimde programatik kodlar\u0131m\u0131z\u0131 &#8220;&lt;%..%&gt;&#8221; etiketleri aras\u0131nda yap\u0131yorduk.MVC&#8217;nin performans\u0131 ve h\u0131z\u0131ndan yararlan\u0131rken bu bloklar\u0131n eziyeti ayr\u0131 bir dert oluyordu.\u00c7\u00fcnk\u00fc MVC 2.0 da View Engine olarak Web Form kullan\u0131yorduk.Ancak MVC 3 ve 4 versiyonlar\u0131nda Razor View Engine teknolojisi sayesinde &#8220;@&#8221; karakteriyle programatik i\u015flemlerimizi \u00e7ok rahat bir \u015fekilde halledebiliyoruz.\u00d6rnek bir MVC 4.0 Razor View Engine projesinde herhangi bir sayfada tarih fonksiyonu sayesinde o anki dakikay\u0131 yazd\u0131ral\u0131m.<\/em><\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@DateTime.Now.Minute\r\n<\/pre>\n<p>Dikkatinizi \u00e7ektiyse, programatik i\u015flem sonucu herhangi bir blok kapatma zorunlulu\u011fumuz bulunmamaktad\u0131r.E\u011fer Web Form View Engine kullansayd\u0131k a\u015fa\u011f\u0131daki \u015fekilde bir i\u015flem uygulamam\u0131z gerekecekti.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n&lt;% DateTime.Now.Minute %&gt;\r\n<\/pre>\n<p>Evet, bu iki i\u015flemin normal Asp.NET Web Form i\u015flemlerinden gayet kolay ve sade olmas\u0131 haddiyle taktire \u015fayan bir durum.Ancak insan kolay\u0131 varken az zoruda g\u00f6z\u00fcnde b\u00fcy\u00fct\u00fcyor olsa gerek \ud83d\ude42<\/p>\n<p>\u015eimdide &#8220;@&#8221; operat\u00f6r\u00fcn\u00fcn kullan\u0131m\u0131n\u0131 inceleyelim.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{var Adiniz = &quot;Gen\u00e7ay Y\u0131ld\u0131z&quot;;}\r\n@{var Soyadiniz = &quot;Y\u0131ld\u0131z&quot;;}\r\n<\/pre>\n<p>\u0130ster yukar\u0131daki gibi tek sat\u0131rl\u0131 kullanabilirsiniz.<br \/>\n\u0130ster,<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    var Adiniz = &quot;Gen\u00e7ay Y\u0131ld\u0131z&quot;;\r\n    var Soyadiniz = &quot;Y\u0131ld\u0131z&quot;;\r\n}\r\n<\/pre>\n<p>yukar\u0131daki gibi \u00e7ok sat\u0131rl\u0131 kullanabilirsiniz.<\/p>\n<p>Yukar\u0131daki \u00f6rneklerde de g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi tek sat\u0131rl\u0131 ya da \u00e7ok sat\u0131rl\u0131 programatik kodlarda &#8220;{-}&#8221; scopelar\u0131n\u0131 kullanabiliyorsunuz.<\/p>\n<p><span style=\"font-size: x-small;\"><strong>Ben bu makaleyi C# dilinde \u00f6rneklendirdi\u011fim i\u00e7in ve okuyucular\u0131m\u0131nda C# kullanarak tatbik ettiklerini varsayd\u0131\u011f\u0131m i\u00e7in &#8220;;&#8221;(noktal\u0131 virg\u00fcl) karakterinin hi\u00e7 \u015fa\u015fmaz her scope blo\u011fu i\u00e7erisinde her kodun sonuna konulmas\u0131 gerekti\u011fini unutmaman\u0131z\u0131 tavsiye ederim.<\/strong><\/span><\/p>\n<p>Bir sayfada iki farkl\u0131 kod blo\u011fu bulunuyorsa e\u011fer ve bu bloklar i\u00e7erisinde de\u011fi\u015fken veya referanslar varsa di\u011fer bloktan ula\u015f\u0131labilirlerdir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    char Karakter = 'A';\r\n}\r\n@{\r\n    int Asci = Convert.ToInt32(Karakter);\r\n}\r\n<\/pre>\n<p>Yukar\u0131da g\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi bir kod blo\u011fu i\u00e7indeki char tipinden &#8220;Karakter&#8221; ismindeki de\u011fi\u015fkene, ba\u015fka bir kod blo\u011fundan ula\u015f\u0131l\u0131yor ve int tipine \u00e7evrilerek ASCI kodu elde ediliyor.<\/p>\n<p>Kod bloklar\u0131 aras\u0131nda HTML taglar\u0131 derleyici taraf\u0131ndan otomatik olarak alg\u0131lanabilirler.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    string Adiniz = &quot;Gen\u00e7ay&quot;;\r\n    string Soyadiniz = &quot;Yildiz&quot;;\r\n    &lt;strong&gt;Say\u0131n&lt;\/strong&gt; &lt;b&gt;@Adiniz @Soyadiniz&lt;\/b&gt;\r\n}\r\n<\/pre>\n<p>Burada dikkat etmeniz gereken nokta HTML taglar\u0131 aras\u0131nda \u00e7a\u011f\u0131rd\u0131\u011f\u0131m\u0131z de\u011fi\u015fkenleri &#8220;@&#8221; operat\u00f6r\u00fc sayesinde \u00e7a\u011f\u0131rm\u0131\u015f bulunuyoruz.<\/p>\n<p>E\u011fer ki kod blo\u011fu i\u00e7erisinde HTML etiketleri kullanmadan metinsel yap\u0131da bir de\u011fer yazd\u0131rmak istiyorsak, yazaca\u011f\u0131m\u0131z de\u011feri &#8220;yaz\u0131lacak de\u011fer&#8221; aras\u0131na almam\u0131z gerekiyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    string Gun = &quot;Pazartesi&quot;;\r\n    &lt;text&gt;Bu g\u00fcn g\u00fcnlerden @Gun&lt;\/text&gt;\r\n}\r\n<\/pre>\n<p>Unutmayal\u0131m ki, &#8220;<text>&#8230;<\/text>&#8221; taglar\u0131n\u0131 \u00e7ok sat\u0131rl\u0131k metinsel yap\u0131larda da kullanabiliriz.Ancak tek sat\u0131rl\u0131k metinsel de\u011fer yazd\u0131racaksak, &#8220;<text>&#8230;<\/text>&#8221; yerine &#8220;@:&#8221; ifadelerini de kullanabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    string Gun = &quot;Pazartesi&quot;;\r\n    @:Bu g\u00fcn g\u00fcnlerden @Gun\r\n}\r\n<\/pre>\n<p>&#8220;@&#8221; operat\u00f6r\u00fc i\u00e7erisinde programatik i\u015flevler d\u0131\u015f\u0131nda matematiksel i\u015flemlerde yapt\u0131rabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@(15 + 22)\r\n@(453 \/ 2)\r\n@(3-25)\r\n<\/pre>\n<p>Burada dikkat etmeniz gereken nokta, &#8220;@&#8221; opearet\u00f6r\u00fcnden sonra s\u00fcsl\u00fc parantez&#8221;{&#8230;}&#8221; de\u011fil, normal paranter&#8221;(&#8230;)&#8221; a\u00e7\u0131l\u0131p kapat\u0131l\u0131yor.<\/p>\n<p>Bir \u00f6nemli noktalardan biriside, Escape karakterler olan &#8220;\\&#8221;, &#8220;&#8221;&#8221; gibi karakterlerin metinsel yap\u0131larda kullan\u0131m\u0131nda ki s\u0131k\u0131nt\u0131lar\u0131d\u0131r.E\u011fer bir metinsel yap\u0131n\u0131n i\u00e7ine ters slash ya da t\u0131rnak i\u015fareti koyulmu\u015fsa e\u011fer, C#&#8217;ta bildi\u011finiz standart &#8220;\\&#8221; i\u015flemini uygulayabilirsiniz.<\/p>\n<p>Ancak bu \u00f6zel karakterler i\u00e7in kolay y\u00f6ntemler mevcut.E\u011fer, metinin i\u00e7inde t\u0131rnak kullan\u0131l\u0131yorsa e\u011fer, iki kere yaz\u0131lmal\u0131 ve metinsel de\u011ferin ba\u015flad\u0131\u011f\u0131 t\u0131rna\u011f\u0131n ba\u015f\u0131na &#8220;@&#8221; operat\u00f6r\u00fc koyulmal\u0131d\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    string Metin = @&quot;Metinsel de\u011ferler i\u00e7inde &quot;&quot; t\u0131rnak olmaz  &quot;;\r\n}\r\n<\/pre>\n<p>E\u011fer ki, metinin i\u00e7inde ters slash kullan\u0131l\u0131yorsa, metinsel de\u011ferin ba\u015flad\u0131\u011f\u0131 t\u0131rna\u011f\u0131n ba\u015f\u0131na tekrardan &#8220;@&#8221; operat\u00f6r\u00fcn\u00fc koymal\u0131y\u0131z.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    string Metin = @&quot;Metinsel de\u011ferler i\u00e7inde \\ ters slash olmaz  &quot;;\r\n}\r\n<\/pre>\n<p><em><strong>Bo\u015fluk Kullan\u0131m\u0131<\/strong><\/em><br \/>\nKod bloklar\u0131 i\u00e7erisinde kullan\u0131lan bo\u015fluklar program\u0131n ak\u0131\u015f\u0131na etki etmezler.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    string Ad =         &quot;Gen\u00e7ay&quot;;\r\n}\r\n<\/pre>\n<p>Ayr\u0131ca kod bloklar\u0131 i\u00e7inde yaz\u0131lan kodlar farkl\u0131 sat\u0131rlarda yaz\u0131lsada ifadeyi etkileme durumlar\u0131 olmayacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    string\r\n        Ad\r\n        =\r\n        &quot;Gen\u00e7ay&quot;\r\n        ;\r\n}\r\n<\/pre>\n<p>\u015euna dikkat etmeliyiz ki, metinsel yap\u0131daki ifadeler b\u00f6l\u00fcnerek yaz\u0131lamazlar.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    string Metin = &quot;Merhaba\r\n    Ben hatal\u0131 bir\r\n    yaz\u0131m\u0131m\r\n    &quot;;\r\n}\r\n<\/pre>\n<p>Yukar\u0131daki tarzda bir metinsel yap\u0131y\u0131 b\u00f6lerek yazarsak program derlenmeyecektir.<br \/>\nE\u011fer bu \u015fekilde metinsel yap\u0131lar\u0131 b\u00f6lmek istiyorsak, t\u0131rnaktan \u00f6nce yine &#8220;@&#8221; operat\u00f6r\u00fcn\u00fc koymam\u0131z gerekmektedir.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@{\r\n    string Metin = @&quot;Merhaba\r\n    Ben hatal\u0131 bir\r\n    yaz\u0131m\u0131m\r\n    &quot;;\r\n}\r\n<\/pre>\n<p>Yukar\u0131daki tarzda metinsel ifadeler b\u00f6l\u00fcnd\u00fc\u011f\u00fcnde hata vermeyecektir.<\/p>\n<p><strong>Sunucu Tabanl\u0131 Yorum ve A\u00e7\u0131klama Sat\u0131rlar\u0131 Eklemek<\/strong><\/em><br \/>\n\u00dczerinde \u00e7al\u0131\u015ft\u0131\u011f\u0131m\u0131z projenin a\u00e7\u0131klamas\u0131n\u0131 yapabilmek i\u00e7in gerekli alanlarda yorumlar ve a\u00e7\u0131klamalar ekleyebiliriz.E\u011fer projemizde a\u00e7\u0131klama sat\u0131rlar\u0131 olu\u015fturmak istiyorsak &#8220;@*..*@&#8221; operat\u00f6rleri aras\u0131na yorumumuzu yazmal\u0131y\u0131z.Bu operat\u00f6rler aras\u0131na tek veya \u00e7ok sat\u0131rl\u0131 yorumlar yazabiliriz.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@* Bu bir a\u00e7\u0131klama sat\u0131r\u0131d\u0131r.... *@\r\n<\/pre>\n<p>Tabi i\u015fin g\u00fczel yan\u0131, Razor ile kulland\u0131\u011f\u0131m\u0131z dil her neyse onun her t\u00fcrl\u00fc nimetinden faydaland\u0131\u011f\u0131m\u0131z gibi, yorum sat\u0131rlar\u0131n\u0131 o dilin teferruat\u0131n\u0131 kullanarakta olu\u015fturabiliyoruz.<\/p>\n<p>Evet arkada\u015flar, bu yaz\u0131mda da Asp.NET MVC 4.0 Razor View Engine teknolojisini teferruat\u0131yla tan\u0131m\u0131\u015f olduk.Faydalanman\u0131z dile\u011fiyle..<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar..<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Asp.NET MVC 3 s\u00fcr\u00fcm\u00fc itibaren gelen ve MVC 4.0 s\u00fcr\u00fcm\u00fcnde de ge\u00e7erli olan &#8220;View Engine&#8221; yap\u0131s\u0131, &#8220;Server Side&#8221; yani sunucu tarafl\u0131 kodlama yap\u0131s\u0131yla, &#8220;Client Side&#8221; dedi\u011fimiz kullan\u0131c\u0131 tarafl\u0131 kodlamay\u0131 birle\u015ftiren bir teknolojidir.Uzun laf\u0131n k\u0131sas\u0131,&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[345],"tags":[746,369,283,755,368,370,120],"class_list":["post-1437","post","type-post","status-publish","format-standard","hentry","category-mvc-4-0","tag-asp-net-mvc","tag-engine","tag-mvc","tag-mvc-4-0","tag-razor","tag-razor-view-engine","tag-view"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=1437"}],"version-history":[{"count":0,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/1437\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=1437"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=1437"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=1437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}