Razor Ninja'sının El Kitabı
09.07.2011 tarihinde yazldktan sonra, 5 kii yorum yazm.
MVC3 ile birlikte Razor ViewEngine geldiinde tamda yeni bir projeye balyordum fakat Spark ile devam etmeyi düünüyordum. Spark ile Razor arasnda ufak bir kararszlktan sonra hem ekosistemi hemde devamll olacan düündüümdem Razor'u seçtim. Alana kadar biraz skntlyd çünkü baz temel ilemleri yapmak için ufak tefek ipuçlarn bilmek gerekiyordu aratrrken örendiim bu ipuçlarn derleyip böyle bir Tutorial hazrladm. Okuyun ;)
String atraksiyonlarnda <text/>
Razor direkt HTML ile iç, içe kullanlabildiinden baz durumlarda C#'n içinden string çkts vermek gerekebiliyor. Böyle durumlarda bavurabileceiniz akll bir kaç tag' olarak <text> ie yaryor
Çkt:
$('#1').text('Deneme 1'); $('#2').text('Deneme 2'); $('#3').text('Deneme 3'); $('#4').text('Deneme 4'); ...
@: Blok'u
Akc bir Razor sytax' için kullanlabilecek bir özellikte @: iaretlemesi. Bu iaretleme <text> ile edeerdir tek fark tek satr olarak kullanlmaktadr. <text> ise birden fazla satrda string çkts vermek için kullanlr ve bu taglarn arasndaki iaretlemeler ViewEngine tarafndan render edilmez. @: kullanmna örnek;
Çkt:
lem Gerçekleti
Comment'ler nasl olacak peki?
Razor'da da her ViewEngine'de olduu gibi kod içine açklama eklemek için kullanabileceiniz iaretlemeler vardr, tabi klasik olarak bildiimiz \\ veya ' olarak deil onun yerine @* ... *@ eklinde. Bu iaretlemeyi kullanlarak sunucu tarafl kod yorumlar ekleyebiliryorsunuz.
Tek satr için
gibi. Burda ki güzellik hem tek satr hemde çoklu satrda ayn iaretlemeyi kullanyor oluumuz.
Strongly-Typed View
Klasik ASP.NET ViewEngine'inde View'i belirli bir Model ile kullanmak istediimizde sayfann en üstünde attributes'lerden oluan uzunca bir tag eklemek gerekiyordu. Razor'da bu @model iareti ile kolayca gerçekletirebileceiniz bir ilem.
Örnein:
@Html.Raw
HTML'i Encode ederek ekrana veren güzel bir özelliktir. Klasik ASP.NET'de ki Server.HtmEncode() fonksiyonuna benzer. Ayn ii gören dier bir yardmc komut ise HtmlString().
Kullanm basittir:
Çkts:
<h1>Deneme</h1>
olacaktr.
Namespace'leri nasl kullanabiliyoruz?
Örnein Razor sayfasnn içinde System.IO namespace'i altndan bir Class kullanmak istiyoruz. Bunun için sayfasnn @model çarsnn altna @using çarsn yapmanz yeterli.
@using System.IO
gibi.
Sayfa içinde @function
Kullanl özelliklerden bir taneside Razor sayfas içinde sadece o sayfaya özel fonksiyonlar üretip, kolaylkla kullanabilmemiz. Örnein: Verdiiniz string'i ekrana krmz yazan bir sayfa içi function yazmak istersek.
eklinde yazabiliriz. IHtmlString döndürdüüne dikkat etmisinizdir Razor bunu render edilecek html string'i olarak alglayacak ve browser'a yorumlamas için gönderecektir.
Koullar (Conditions) nasl yazlyor?
Razor içinde ?:, switch, if.. koullar yazmak doal olarak mümkün bunun için @() iaretlemesi kullanlyor.
Örnein ?: condition'na örnek vermek gerekirse.
Model.Status deeri true olduu için ekrana direkt Tamam yazlacaktr.
If konuulu için ise;
Burda dikkat edilmesi gereken nokta @: kullanld için satr atlamalarnn zorunlu olduu. Dier bir If koulu örnei ise;
Burda HTML tag' ile string'i yazdryoruz fakat bu her zaman istenen bir durum deil o nedenle <text> ile'de kullanlmas mümkün.
text ile kullandnzda sadece "Tamam" string'i ekrana baslr.
Razor Delegate
Razor Delegate'leri kullanarak daha temiz, okunakl kodlama yaplmas mümkün. Baz durumlarda ise karmakl ve ileri oldukça kolaylatryor. Hemen örnek vereyim;
htiyacnza göre geniletmeniz mümkün, parametre dynamic olduu için kendi tipleriniz içinde çeitli fonksiyonlar gelitirip daha kullanl fonksiyonlar üretebilirsiniz tabi.
@Helper
Razor bünyesinde bir çok yardmc method barndrmasna ramen ihtiyacnza uygun Helper methodlar yazmanz kaçnlmazdr. Bu methodlarda sadece Razor sayfas içerisinde oluturup, dier sayfalarda da kullanabilmek isteyebilirsiniz ite bunun için @Helper iaretlemesi ile oluturacanz method'lar kullanabilirsiniz. öyle ki;
Çkts:
118,00 TL
Burdaki trick ise KdvDahil fonksiyonunu yazdnz Razor sayfasn Projenizde ki App_Code sayfasnn altna gönderdiinizde KdvDahil fonksiyonuna her Razor sayfasndan ulaabiliyor olmanzdr. Örnein KdvDahil fonksiyonunun yazl olduu Razor dosyasnn ismi Fiyatlar.cshtml olsun. KdvDahil fonksiyonuna dier Razor sayfalarndan ulamak için Fiyatlar.KdvDahil() eklinde kullanabilmeniz mümkün.
HTML data-* ve Class Attributes
@Html.ActionLink methodu içinde HTML5 ile birlikte gelen data-* attributes'ini kullanmak isteyebilirsiniz MVC3 bunun için Anonymous Type'lerden yararlanyor fakat HTML'e göndereceiniz attributes syntax' Anonymous Type'larda kullanlan cinsten deil. Örnekle açklayalm.
<a class="/Home/Delete" data-id="45">Database</div>
çktsn ActionLink kullanabilmek için aadaki ekilde yazmalsnz.
dikkat ederseniz data_id olarak yazdk fakat HTML'e data-id olarak yansd buda ActionLink methodunun akll özelliklerinden bir tanesi.
ActionLink için verebileceimiz dier bir ipucuda class kullanm. class .Net'de bir özel bir kelime olduundan, herhangi bir deikene'de class ismini verirken bunun deiken olduunu belirtmelisiniz;
<a class="/Home/Delete" data-id="45">Database</div>
çktsn alabilmeniz için ActionLink aadaki ekilde olmaldr.
@ burda bir çeit escape karakter olarak kullanlabiliyor.
@section
Section'lar genel ablonlar oluturulmasnda kullanlan son derece yararl bir Razor fonksiyonudur. MasterPage'de belirleyeceiniz ve isimlendirdiiniz section' herhangi bir Razor sayfasnda özel olarak kullanabilirsiniz.
Önce _Layout.cshtml içinde bir section tanmlamalsnz.
Daha sorna Layout eklenmi bir sayfada bu section' çarabilirsiniz.
@section jquery{ $('#body').append('Section Çarld'); }
gibi. Burdaki örneimizde Razor sayfamza jquery'i tekrar initialize etmeden _Layout üzerinden çaltdk.
@Html.RenderPartial
Kendi oluturduunuz kontrolleri veya PartialView'leri Razor içinden çarmanz mümkün. Aadaki ekilde;
Burda dikkat etmeniz gereken ";" noktal virgül. Çünkü {..} parantezleri açtnzda C# moduna girmi oluyorsunuz. Menu.cshtml, PartialView'imiz ~/Views/Shared/ dizini altnda olmak zorunda çünkü Razor ViewEngine'inde bu path'ler default olarak aranyor. Fakat bu Path'lerin dnda da PartialView'lerinizi Render etmeniz mümkün,
PartialView'inizi herhangi bir Model ile kullanacaksanz bu Model'i parametre geçmek için aadaki syntax' kullanabilirsiniz.
ki @@, Bir @ eder
Baz durumlarda Razor'dan string geriye döndürürken @ iareti geçen string'ler döndürmeniz olas bu durumda @@ olarak verirseniz Razor bunu alglayp normal string gibi ileyecektir.
Normal string olarak alglanr.
@Deneme String@
Razor Syntax' olarak alglanr.
Ek olarak e-posta adreslerini Razor otomatik alglar ve ona göre davranr yani email adreslerinde böyle bir harekete gerek yok, direkt yazabilirsiniz.
@Url.Action
Url.Action, Controller'de oluturduunuz Action'larn sadece adresini verir. Ben genelde JavaScript'in içinde ajax çarlarnda kullanyorum.
Burda çkt /Home/Index/1 eklinde geliyor.
Razor içinden SQL
imdiye kadar hiç kullanmadm fakat aklmzda bulunsun. Razor'da @{..} blogu içinde C# moduna geçtiimizi daha önce söylemitik, e madem C# moduna geçiyoruz o halde class içinde kullandmz tüm atraksiyonlarda kullanabilmemiz normal. Aada Razor sayfasndan sql sorgusunun çaltrlmasna dair bir örnek var.
bildiimiz PHP gibi...
imdilik bu kadar, yeni fonksiyonlar tecrübe ettikçe buraya ekliyor olacam...
Kolay Gelsin ;)
Yorum |
|
|