Bu bölümde Razor Sayfaları (cshtml uzantılı sayfalar) içinde C# kullanarak yapılabilecek işlemlere ve sözdizimine ayrılmıştır.
01.01.01. Sözdizimi ve değişkenler
@ işaretinden ve kullanımdan bir önceki bölümde bahsetmiştik. Şimdi basit bir örnek ile açıklayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@page <!-- Tek blokluk ifade --> @{ var myMessage = "Merhaba Razor Pages!"; } <!-- Satır içinde ifade / değişken --> <p>myMessage değişkeninin değeri: @myMessage</p> <!-- Çok bloklu bir ifade --> @{ var degisken = "Hoşgeldiniz!"; var weekDay = DateTime.Now.DayOfWeek; var degiskenMessage = degisken + " Haftanın günü: " + weekDay; } <p>Merhaba: @degiskenMessage</p> |
Çıktı:
1 2 3 4 5 6 7 |
<!-- Tek blokluk ifade --> <!-- Satır içinde ifade / değişken --> <p>myMessage değişkeninin değeri: Merhaba Razor Pages!</p> <!-- Çok bloklu bir ifade --> <p>Merhaba: Hoşgeldiniz! Haftanın günü: Monday</p> |
var değişkeni çok esnek bir değişkendir. Herhangi bir veri tipini içine alabilir. Ancak, bu esnek kullanım ufak performans gideri oluşturabilir. C# klasik değişkenlerini de kullanmak mümkündür.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@page <!-- var kullanımı ile --> @{ var degisken = "Merhaba Razor Pages!"; var sayac = 103; var bugun = DateTime.Today; } <p>@degisken </p> <p>@sayac </p> <p>@bugun </p> <!-- veri tipine göre kullanım --> @{ string degisken1 = "Welcome to W3Schools"; int sayac1 = 103; DateTime bugun1 = DateTime.Today; } <p>@degisken1 </p> <p>@sayac1 </p> <p>@bugun1 </p> |
Çıktı:
1 2 3 4 5 6 7 8 9 |
<!-- var kullanımı ile --> <p>Merhaba Razor Pages! </p> <p>103 </p> <p>10.12.2018 00:00:00 </p> <!-- veri tipine göre kullanım --> <p>Welcome to W3Schools </p> <p>103 </p> <p>10.12.2018 00:00:00 </p> |
Özet olarak:
- Değişkenler veri depolamak için kullanılır.
- Değişken alfabetik karakter ile başlamalı ve boşluk veya özel karakterler içermemelidir.
- Değişkenler var anahtar sözcüğü veya tipi ile tanımlanır. ASP.Net veri tipi otomatik olarak tanımlayabilir.
- var ile tanımlanan Her değişken ilk aldığı değere göre şekillenir. Örneğin ilk string bir ifade aldıysa değişken türü string olur.
- int, float, decimal, bool, string veri tipleri kullanılabilir.
- =,+,+=,-,*gibi operatörlerin kullanım şekli bildiğimiz gibidir.
- Veri çevrimi yapmak için AsInt(), IsInt(), AsFloat(), IsFloat(), AsDecimal(), IsDecimal(), AsDateTime(), IsDateTime(), AsBool(), IsBool()metotları kullanılabilir.
01.01.02. Döngüler ve array
Basit bir örnek üzerinden açıklayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
@page <!-- for --> @for(var j = 10; j < 14; j++) {<p>Satır @j</p>} <!-- while --> @{ var i = 0; while (i < 3) { i += 1; <p>Satır @i</p> } } <!-- array ve foreach --> @{ string[] weekDays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; int ind = Array.IndexOf(weekDays, "Wed")+1; int len = weekDays.Length; string theday = weekDays[2]; } @foreach (var _day in weekDays) {<li>@_day</li>} <p>@ind</p> <p>@len</p> <p>@theday</p> |
Çıktı:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!-- for --> <p>Satır 10</p><p>Satır 11</p><p>Satır 12</p><p>Satır 13</p> <!-- while --> <p>Satır 1</p> <p>Satır 2</p> <p>Satır 3</p> <!-- array ve foreach --> <li>Sun</li><li>Mon</li><li>Tue</li><li>Wed</li><li>Thu</li><li>Fri</li><li>Sat</li> <p>4</p> <p>7</p> <p>Tue</p> |
İlk for döngüsü 10-13 arasındaki sayıların başına “Satır” ekler. İkinci döngü while ise 1 ile 3 arasında sayıların başına “Satır” ekler. Döngü kullanımı Java, PHP, C gibi diğer dillere çok benzerdir. Önemli nokta @ ifadesini doğru bir şekilde kullanmaktır. Son örnek bir dizi ve o dizi üzerinde yapılacak standart işlemlere ayrılmıştır. Bu örnekte Foreach döngüsü kullanılmıştır.
01.02.03. if, else if, else ve switch
Yine basit bir örnekle başlayalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
@page @{var fiyat=25;} @if (fiyat>=30) { <p>Fiyat yüksek.</p> } else if (fiyat>20 && fiyat<30) { <p>Fiyat uygun.</p> } else { <p>Fiyat düşük.</p> } |
Daha öncede belirtiğimiz gibi @ ifadesinin kullanımı son derece önemlidir. Şimdi de basit bir switch case örneği yapalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
@page @{ var gun=DateTime.Now.DayOfWeek; var gun_str= gun.ToString(); var message=""; } @switch(gun_str) { case "Monday": message="Haftanın ilk günü."; break; case "Thursday": message="Haftasonuna bir gün kaldı."; break; case "Friday": message="Yarın haftasonu!"; break; default: message="Bu gün " + gun_str; break; } <p>@message</p> |
01.02.04. using
C# bir using ifadesi bir nesnenin bitirildiğinden emin olmak için kullanılır. Örneğin standart bir Veritabanı işleminde connetion open olduktan sonra kapanmasından emin olmak için using bölümüne yazılır. close işlemi yapılmasa da using bittiğinde close gerçekleşir. Benzer bir mekanizma razor içine de kurulmuştur. Örnek olarak HTML Helper kullanıp sunucu tarafında bir form yaratacağız.
1 2 3 4 5 6 7 8 |
@using (Html.BeginForm()) { <div> email: <input type="email" id="Email" value=""> <button>Register</button> </div> } |
Çıktısı:
1 2 3 4 5 6 |
<form action="/09" method="post"> <div> email: <input id="Email" type="email" value=""> <button>Register</button> </div> <input name="__RequestVerificationToken" type="hidden" value="CfDJ8FSN2tnJMA5Ikrh3J6UOIk429Oo3ZifdCphh-Ytjll4c6dYQ278glo1WI9eJyLhbM1RecU30NKjjXsoUdjOCDOgWG8-2_uZWgBVgBAn_fpmUSI4FvD89yEZLQ1g88VapxWioJ0Bqr--RKn4jDJKO4jQ"></form> |
form action özelliği, method özelliği otomatik olarak yazılmıştır. Ayrıca güvelik amaçlı __RequestVerificationToken isminde bir input eklenmiştir. Dikkat edilişe form kapatılmamasına rağmen kapatma işlemi otomatik yapılmıştır.
01.02.05. try, catch, finally
C# kullanımına çok benzerdir.
1 2 3 4 5 6 7 8 9 10 11 12 |
@try { throw new InvalidOperationException("Burası hatalı bir şeyler olsun."); } catch (Exception ex) { <p>Hata mesajı: @ex.Message</p> } finally { <p>Her şeye rağmen çalışan bölüm.</p> } |
throw ile bir hata tetiklendi. catch ile hata yakandı ve ex içindeki Message gösterildi. Finally ise her durumda çalışan bir bölüm olarak çalıştı.
01.02.06. @lock
Razor kritik bölümleri kilit ifadelerle koruma yeteneğine sahiptir.
1 2 3 4 |
@lock (SomeLock) { // Kritik bölüm } |
01.02.06. Yorum yazma
Hem C# hem de HTML taraflı yorumu destekler. Örneğin:
1 2 3 4 5 |
@{ /* C# yorumu */ // Diğer C# yorumu } <!-- HTML yorumu --> |
Burada dikkat etmeniz gereken bölüm C# bölümü ile HTML bölümünü birbirinden ayırmanızdır. Ayrıca Razor @* *@ ifadeleriniz arasına yazılan hiç bir kodu veya metni yorumlamaz. Örneğin:
1 2 3 4 5 6 7 |
@* @{ /* C# comment */ // Another C# comment } <!-- HTML comment --> *@ |