Razor Söz Dizimini Kullanarak ASP.NET Web Programlamaya Giriş (C#)

yazan: Tom FitzMacken

Bu makalede, Razor söz dizimini kullanarak ASP.NET Web Sayfaları ile programlamaya genel bir bakış sunun. ASP.NET, Microsoft'un web sunucularında dinamik web sayfaları çalıştırma teknolojisidir. Bu makale, C# programlama dilini kullanmaya odaklanır.

Öğrenecekleriniz:

  • Razor söz dizimini kullanarak Web Sayfaları ASP.NET programlamaya başlamak için en iyi 8 programlama ipucu.
  • İhtiyacınız olacak temel programlama kavramları.
  • Sunucu kodunun ve Razor söz diziminin ne ASP.NET.

Yazılım sürümleri

  • ASP.NET Web Sayfaları (Razor) 3

Bu öğretici ASP.NET Web Sayfaları 2 ile de çalışır.

En İyi 8 Programlama İpucu

Bu bölümde Razor söz dizimini kullanarak ASP.NET sunucu kodu yazmaya başladığınızda bilmeniz gereken birkaç ipucu listelenmiştir.

Not

Razor söz dizimi C# programlama dilini temel alır ve ASP.NET Web Sayfalarında en sık kullanılan dildir. Ancak Razor söz dizimi, Visual Basic dilini de destekler ve gördüğünüz her şeyi Visual Basic'te de yapabilirsiniz. Ayrıntılar için Visual Basic Language ve Syntax ekine bakın.

Bu programlama tekniklerinin çoğu hakkında daha fazla ayrıntıya makalenin ilerleyen bölümlerinden ulaşabilirsiniz.

1. @ karakterini kullanarak bir sayfaya kod eklersiniz

Karakter @ satır içi ifadeleri, tek deyim bloklarını ve çok deyimli blokları başlatır:

<!-- Single statement blocks  -->
@{ var total = 7; }
@{ var myMessage = "Hello World"; }

<!-- Inline expressions -->
<p>The value of your account is: @total </p>
<p>The value of myMessage is: @myMessage</p>

<!-- Multi-statement block -->
@{
    var greeting = "Welcome to our site!";
    var weekDay = DateTime.Now.DayOfWeek;
    var greetingMessage = greeting + " Today is: " + weekDay;
}
<p>The greeting is: @greetingMessage</p>

Sayfa tarayıcıda çalıştırıldığında bu deyimler şöyle görünür:

Razor-Img1

İpucu

HTML Kodlaması

Önceki örneklerde olduğu gibi karakteri kullanarak @ bir sayfada içerik görüntülendiğinde, ASP.NET HTML çıkışı kodlar. Bu, ayrılmış HTML karakterlerini (ve gibi <>&) HTML etiketleri veya varlıkları olarak yorumlanmaları yerine karakterlerin bir web sayfasında karakter olarak görüntülenmesini sağlayan kodlarla değiştirir. HTML kodlaması olmadan, sunucu kodunuzun çıkışı doğru görüntülenmeyebilir ve bir sayfayı güvenlik risklerine maruz bırakabilir.

Amacınız etiketleri işaretleme olarak işleyen HTML işaretlemesi (örneğin <p></p> , bir paragraf veya <em></em> metni vurgulama) çıkışı yapmaksa, bu makalenin devamında Kod Bloklarında Metin, İşaretleme ve Kod Birleştirme bölümüne bakın.

Formlarla Çalışma bölümünde HTML kodlaması hakkında daha fazla bilgi edinebilirsiniz.

2. Kod bloklarını ayraç içine alırsınız

Kod bloğu bir veya daha fazla kod deyimi içerir ve küme ayraçları içine alınır.

<!-- Single statement block.  -->
@{ var theMonth = DateTime.Now.Month; }
<p>The numeric value of the current month: @theMonth</p>

<!-- Multi-statement block. -->
@{
    var outsideTemp = 79;
    var weatherMessage = "Hello, it is " + outsideTemp + " degrees.";
}
<p>Today's weather: @weatherMessage</p>

Tarayıcıda görüntülenen sonuç:

Razor-Img2

3. Bir bloğun içinde her kod deyimini noktalı virgülle sonlarsınız

Bir kod bloğunun içinde, her tam kod deyimi noktalı virgülle bitmelidir. Satır içi ifadeler noktalı virgülle bitmiyor.

<!-- Single-statement block -->
@{ var theMonth = DateTime.Now.Month; }

<!-- Multi-statement block -->
@{
    var outsideTemp = 79;
    var weatherMessage = "Hello, it is " + outsideTemp + " degrees.";
}

<!-- Inline expression, so no semicolon -->
<p>Today's weather: @weatherMessage</p>

4. Değerleri depolamak için değişkenleri kullanırsınız

Dizeler, sayılar ve tarihler gibi değerleri bir değişkende depolayabilirsiniz. anahtar sözcüğünü var kullanarak yeni bir değişken oluşturursunuz. değişken değerlerini kullanarak @doğrudan bir sayfaya ekleyebilirsiniz.

<!-- Storing a string -->
@{ var welcomeMessage = "Welcome, new members!"; }
<p>@welcomeMessage</p>

<!-- Storing a date -->
@{ var year = DateTime.Now.Year; }

<!-- Displaying a variable -->
<p>Welcome to our new members who joined in @year!</p>

Tarayıcıda görüntülenen sonuç:

Razor-Img3

5. Değişmez değer dize değerlerini çift tırnak içine alırsınız

Dize, metin olarak ele alınan bir karakter dizisidir. Bir dizeyi belirtmek için, dizeyi çift tırnak içine almanız gerekir:

@{ var myString = "This is a string literal"; }

Görüntülemek istediğiniz dize ters eğik çizgi karakteri ( \ ) veya çift tırnak işareti ( " ) içeriyorsa, işleciyle önekli @ bir düz metin dizesi değişmez değeri kullanın. (C# dilinde, düz metin dizesi değişmez değeri kullanmadığınız sürece \ karakterinin özel bir anlamı vardır.)

<!-- Embedding a backslash in a string -->
@{ var myFilePath = @"C:\MyFolder\"; }
<p>The path is: @myFilePath</p>

Çift tırnak işareti eklemek için düz metin dizesi değişmez değeri kullanın ve tırnak işaretlerini yineleyin:

<!-- Embedding double quotation marks in a string -->
@{ var myQuote = @"The person said: ""Hello, today is Monday."""; }
<p>@myQuote</p>

Bu örneklerin her ikisini de bir sayfada kullanmanın sonucu aşağıda verilmiştir:

Razor-Img4

Not

Karakterinin @ hem C# dilinde düz metin dize değişmez değerlerini işaretlemek hem de ASP.NET sayfalardaki kodu işaretlemek için kullanıldığına dikkat edin.

6. Kod büyük/küçük harfe duyarlıdır

C# dilinde anahtar sözcükler (, ve ifgibitruevar) ve değişken adları büyük/küçük harfe duyarlıdır. Aşağıdaki kod satırları iki farklı değişken lastName oluşturur ve LastName.

@{
    var lastName = "Smith";
    var LastName = "Jones";
}

Bir değişkeni olarak var lastName = "Smith"; bildirir ve sayfanızdaki bu değişkene olarak @LastNamebaşvurmaya çalışırsanız, yerine değerini "Jones""Smith"alırsınız.

Not

Visual Basic'te anahtar sözcükler ve değişkenler büyük/küçük harfe duyarlı değildir .

7. Kodlamanızın büyük bir bölümünde nesneler yer alır

Nesne; bir sayfa, metin kutusu, dosya, resim, web isteği, e-posta iletisi, müşteri kaydı (veritabanı satırı) vb. ile programlayabileceğiniz bir şeyi temsil eder. Nesnelerin özelliklerini açıklayan ve okuyabileceğiniz veya değiştirebileceğiniz özellikleri vardır; metin kutusu nesnesinin Text özelliği vardır (diğerlerinin arasında), istek nesnesinin özelliği Url vardır, e-posta iletisinin özelliği From vardır ve müşteri nesnesinin özelliği FirstName vardır. Nesneler, gerçekleştirebilecekleri "fiiller" olan yöntemlere de sahiptir. Örnek olarak dosya nesnesinin Save yöntemi, görüntü nesnesinin Rotate yöntemi ve e-posta nesnesinin Send yöntemi verilebilir.

Genellikle sayfadaki metin kutularının Request (form alanları) değerleri, isteğin ne tür bir tarayıcı tarafından yapıldığı, sayfanın URL'si, kullanıcı kimliği vb. gibi bilgiler veren nesnesiyle çalışırsınız. Aşağıdaki örnekte, nesnenin Request özelliklerine nasıl erişildiği ve nesnenin MapPath yönteminin Request nasıl çağrıldığı gösterilmektedir ve bu da size sunucudaki sayfanın mutlak yolunu verir:

<table border="1">
<tr>
    <td>Requested URL</td>
    <td>Relative Path</td>
    <td>Full Path</td>
    <td>HTTP Request Type</td>
</tr>
<tr>
    <td>@Request.Url</td>
    <td>@Request.FilePath</td>
    <td>@Request.MapPath(Request.FilePath)</td>
    <td>@Request.RequestType</td>
</tr>
</table>

Tarayıcıda görüntülenen sonuç:

Razor-Img5

8. Karar veren kodlar yazabilirsiniz

Dinamik web sayfalarının önemli özelliklerinden biri, koşullara göre ne yapacağınızı belirleyebilmenizdir. Bunu yapmak için en yaygın yol deyimiyle if (ve isteğe bağlı else deyimi) kullanmaktır.

@{
   var result = "";
   if(IsPost)
   {
      result = "This page was posted using the Submit button.";
   }
   else
   {
      result = "This was the first request for this page.";
   }
}

<!DOCTYPE html>
<html>
    <head>
        <title></title>
    </head>
<body>
<form method="POST" action="" >
  <input type="Submit" name="Submit" value="Submit"/>
  <p>@result</p>
</form>
</body>
</html>

deyimi if(IsPost) , yazmanın if(IsPost == true)kısa bir yoludur. Deyimleriyle if birlikte, bu makalenin ilerleyen bölümlerinde açıklanan koşulları test etmenin, kod bloklarını yinelemenin çeşitli yolları vardır.

Tarayıcıda görüntülenen sonuç ( Gönder'e tıkladıktan sonra):

Razor-Img6

İpucu

HTTP GET ve POST Yöntemleri ve IsPost Özelliği

Web sayfaları (HTTP) için kullanılan protokol, sunucuya istekte bulunmak için kullanılan çok sınırlı sayıda yöntemi (fiil) destekler. En yaygın iki seçenek, bir sayfayı okumak için kullanılan GET ve sayfa göndermek için kullanılan POST'tır. Genel olarak, bir kullanıcı ilk kez sayfa istediğinde, sayfa GET kullanılarak istenir. Kullanıcı bir formu doldurur ve sonra bir gönder düğmesine tıklarsa, tarayıcı sunucuya bir POST isteği gönderir.

Web programlamada, sayfanın nasıl işlendiğini bilmeniz için sayfanın GET veya POST olarak istenip istenmediğini bilmek genellikle yararlıdır. ASP.NET Web Sayfaları'nda, bir isteğin IsPost GET mi yoksa POST mu olduğunu görmek için özelliğini kullanabilirsiniz. İstek bir POST ise, IsPost özellik true değerini döndürür ve formdaki metin kutularının değerlerini okumak gibi işlemler yapabilirsiniz. Göreceğiniz birçok örnek, değerine IsPostbağlı olarak sayfanın nasıl farklı şekilde işlendiğini gösterir.

Basit Kod Örneği

Bu yordam, temel programlama tekniklerini gösteren bir sayfanın nasıl oluşturulacağını gösterir. Örnekte, kullanıcıların iki sayı girmesini sağlayan bir sayfa oluşturursunuz, ardından bunları ekler ve sonucu görüntüler.

  1. Düzenleyicinizde yeni bir dosya oluşturun ve addNumbers.cshtml olarak adlandırınız.

  2. Aşağıdaki kodu ve işaretlemeyi sayfaya kopyalayın ve sayfada zaten bulunan her şeyi değiştirin.

    @{
        var total = 0;
        var totalMessage = "";
        if(IsPost) {
    
            // Retrieve the numbers that the user entered.
            var num1 = Request["text1"];
            var num2 = Request["text2"];
    
            // Convert the entered strings into integers numbers and add.
            total = num1.AsInt() + num2.AsInt();
            totalMessage = "Total = " + total;
        }
    }
    
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <title>Add Numbers</title>
        <meta charset="utf-8" />
        <style type="text/css">
          body {background-color: beige; font-family: Verdana, Arial;
                margin: 50px; }
          form {padding: 10px; border-style: solid; width: 250px;}
        </style>
      </head>
    <body>
      <p>Enter two whole numbers and then click <strong>Add</strong>.</p>
      <form action="" method="post">
        <p><label for="text1">First Number:</label>
          <input type="text" name="text1" />
        </p>
        <p><label for="text2">Second Number:</label>
          <input type="text" name="text2" />
        </p>
        <p><input type="submit" value="Add" /></p>
      </form>
    
      <p>@totalMessage</p>
    
    </body>
    </html>
    

    Dikkate alabileceğiniz bazı noktalar şunlardır:

    • Karakteri, @ sayfadaki ilk kod bloğunu başlatır ve sayfanın alt kısmına eklenmiş olan değişkenin önünde totalMessage yer alır.
    • Sayfanın üst kısmındaki blok küme ayraçları içine alınır.
    • Üstteki blokta, tüm satırlar noktalı virgülle biter.
    • , , num1num2ve değişkenleri birkaç sayı ve totalMessage bir dize depolartotal.
    • Değişkene totalMessage atanan sabit dize değeri çift tırnak içindedir.
    • Kod büyük/küçük harfe duyarlı olduğundan, totalMessage değişken sayfanın alt kısmına yakın bir konumda kullanıldığında adı üstteki değişkenle tam olarak eşleşmelidir.
    • İfade num1.AsInt() + num2.AsInt() , nesneler ve yöntemlerle nasıl çalış yapılacağını gösterir. AsInt Her değişkendeki yöntemi, bir kullanıcı tarafından girilen dizeyi bir sayıya (tamsayı) dönüştürür, böylece aritmetik işlem gerçekleştirebilirsiniz.
    • <form> etiketi bir method="post" öznitelik içerir. Bu, kullanıcı Ekle'ye tıkladığında sayfanın HTTP POST yöntemi kullanılarak sunucuya gönderileceğini belirtir. Sayfa gönderildiğinde, if(IsPost) test true olarak değerlendirilir ve koşullu kod çalıştırılarak sayıların eklenmesinin sonucu görüntülenir.
  3. Sayfayı kaydedin ve tarayıcıda çalıştırın. (Sayfayı çalıştırmadan önce Dosyalar çalışma alanında seçili olduğundan emin olun.) İki tamsayı girin ve Ekle düğmesine tıklayın.

    Razor-Img7

Temel Programlama Kavramları

Bu makalede ASP.NET web programlamaya genel bir bakış sunulmaktadır. Bu kapsamlı bir inceleme değildir, yalnızca en sık kullanacağınız programlama kavramlarını hızlı bir şekilde gözden geçirebilirsiniz. Yine de ASP.NET Web Sayfalarını kullanmaya başlamak için ihtiyacınız olan hemen her şeyi kapsar.

Ama önce biraz teknik bir geçmiş.

Razor Söz Dizimi, Sunucu Kodu ve ASP.NET

Razor söz dizimi, web sayfasına sunucu tabanlı kod eklemek için basit bir programlama söz dizimidir. Razor söz dizimini kullanan bir web sayfasında iki tür içerik vardır: istemci içeriği ve sunucu kodu. İstemci içeriği, web sayfalarında alışkın olduğunuz öğelerdir: HTML işaretlemesi (öğeler), CSS gibi stil bilgileri, javascript gibi bazı istemci betikleri ve düz metin.

Razor söz dizimi, bu istemci içeriğine sunucu kodu eklemenize olanak tanır. Sayfada sunucu kodu varsa, sunucu sayfayı tarayıcıya göndermeden önce bu kodu çalıştırır. Kod, sunucuda çalıştırılarak, sunucu tabanlı veritabanlarına erişme gibi tek başına istemci içeriği kullanılarak yapılması çok daha karmaşık olabilecek görevleri gerçekleştirebilir. En önemlisi, sunucu kodu dinamik olarak istemci içeriği oluşturabilir; anında HTML işaretlemesi veya başka içerik oluşturabilir ve ardından sayfanın içerebileceği statik HTML'lerle birlikte tarayıcıya gönderebilir. Tarayıcınız için, sunucu kodunuz tarafından oluşturulan istemci içerikleri diğer istemci içeriğinden farklı değildir. Daha önce gördüğünüz gibi, gerekli olan sunucu kodu oldukça basittir.

Razor söz dizimini içeren ASP.NET web sayfalarının özel bir dosya uzantısı (.cshtml veya .vbhtml) vardır. Sunucu bu uzantıları tanır, Razor söz dizimi ile işaretlenmiş kodu çalıştırır ve ardından sayfayı tarayıcıya gönderir.

ASP.NET nereye uyuyor?

Razor söz dizimi, Microsoft'un ASP.NET adlı teknolojisini temel alır ve bu teknoloji de Microsoft .NET Framework temel alır. The.NET Framework, Microsoft'un neredeyse her tür bilgisayar uygulamasını geliştirmeye yönelik büyük ve kapsamlı bir programlama çerçevesidir. ASP.NET, web uygulamaları oluşturmak için özel olarak tasarlanmış .NET Framework parçasıdır. Geliştiriciler ASP.NET kullanarak dünyadaki en büyük ve en yüksek trafikli web sitelerinin birçoğuna sahiptir. (Bir sitedeki URL'nin bir parçası olarak .aspx dosya adı uzantısını gördüğünüzde, sitenin ASP.NET kullanılarak yazıldığını anlarsınız.)

Razor söz dizimi size tüm ASP.NET gücü verir, ancak yeni başlayanlar için öğrenmesi daha kolay olan ve uzmansanız daha üretken olmanızı sağlayan basitleştirilmiş bir söz dizimi kullanır. Bu söz diziminin kullanımı basit olsa da, ASP.NET ve .NET Framework ile olan aile ilişkisi, web siteleriniz daha karmaşık hale geldikçe, kullanabileceğiniz daha büyük çerçevelerin gücüne sahip olduğunuz anlamına gelir.

Razor-Img8

İpucu

Sınıflar ve Örnekler

ASP.NET sunucu kodu, sınıf fikri üzerine oluşturulan nesneleri kullanır. sınıfı, bir nesnenin tanımı veya şablonudur. Örneğin, bir uygulama herhangi bir müşteri nesnesinin ihtiyaç duyduğu özellikleri ve yöntemleri tanımlayan bir Customer sınıf içerebilir.

Uygulamanın gerçek müşteri bilgileriyle çalışması gerektiğinde, müşteri nesnesinin bir örneğini oluşturur (veya örneğini oluşturur). Her müşteri sınıfının ayrı bir örneğidir Customer . Her örnek aynı özellikleri ve yöntemleri destekler, ancak her müşteri nesnesi benzersiz olduğundan her örneğin özellik değerleri genellikle farklıdır. Bir müşteri nesnesinde LastName özellik "Smith" olabilir; başka bir müşteri nesnesinde LastName özellik "Jones" olabilir.

Benzer şekilde, sitenizdeki tek tek tüm web sayfaları sınıfın Page bir örneği olan bir nesnedirPage. Sayfadaki düğme, sınıfın bir örneği Button olan bir Button nesnedir ve bu şekilde devam edilir. Her örneğin kendi özellikleri vardır, ancak bunların tümü nesnenin sınıf tanımında belirtilenleri temel alır.

Temel Söz Dizimi

Daha önce, ASP.NET Web Sayfaları sayfası oluşturma ve HTML işaretlemesine sunucu kodu ekleme hakkında temel bir örnek gördünüz. Burada Razor söz dizimini kullanarak ASP.NET sunucu kodu yazmanın temellerini, yani programlama dili kurallarını öğreneceksiniz.

Programlama konusunda deneyimliyseniz (özellikle C, C++, C#, Visual Basic veya JavaScript kullandıysanız), burada okuduklarının çoğu tanıdık gelecek. Büyük olasılıkla yalnızca sunucu kodunun .cshtml dosyalarındaki işaretlemeye nasıl eklendiğini bilmeniz gerekir.

Kod Bloklarında Metin, İşaretleme ve Kodu Birleştirme

Sunucu kodu bloklarında, çoğunlukla sayfaya metin veya işaretleme (veya her ikisini birden) çıkarmak istersiniz. Sunucu kodu bloğunda kod olmayan metin varsa ve bunun yerine olduğu gibi işlenmesi gerekiyorsa, ASP.NET bu metni koddan ayırt edebilmesi gerekir. Bunu yapmanın birkaç yolu vardır.

  • Metni veya <em></em>gibi <p></p> bir HTML öğesinin içine alın:

    @if(IsPost) {
        // This line has all content between matched <p> tags.
        <p>Hello, the time is @DateTime.Now and this page is a postback!</p>
    } else {
        // All content between matched tags, followed by server code.
        <p>Hello <em>stranger</em>, today is: <br /> </p>  @DateTime.Now
    }
    

    HTML öğesi metin, ek HTML öğeleri ve sunucu kodu ifadeleri içerebilir. ASP.NET açılış HTML etiketini (örneğin, <p>) gördüğünde, öğe ve içeriği de dahil olmak üzere her şeyi tarayıcıda olduğu gibi işler ve sunucu kodu ifadelerini olduğu gibi çözer.

  • işlecini @: veya <text> öğesini kullanın. düz @: metin veya eşleşmeyen HTML etiketleri içeren tek bir içerik satırının çıkışını <text> verir; öğe çıkışa birden çok satır ekler. Bir HTML öğesini çıkışın bir parçası olarak işlemek istemediğinizde bu seçenekler kullanışlıdır.

    @if(IsPost) {
        // Plain text followed by an unmatched HTML tag and server code.
        @: The time is: <br /> @DateTime.Now
        <br/>
        // Server code and then plain text, matched tags, and more text.
        @DateTime.Now @:is the <em>current</em> time.
    }
    

    Birden çok metin satırı veya eşleşmeyen HTML etiketi çıktısı almak istiyorsanız, her satırın önüne öğesini @:ekleyebilir veya satırı bir <text> öğenin içine alabilirsiniz. @: işleci gibi etiketler de<text> metin içeriğini tanımlamak için ASP.NET tarafından kullanılır ve hiçbir zaman sayfa çıkışında işlenmez.

    @if(IsPost) {
        // Repeat the previous example, but use <text> tags.
        <text>
        The time is: <br /> @DateTime.Now
        <br/>
        @DateTime.Now is the <em>current</em> time.
        </text>
    }
    
    @{
        var minTemp = 75;
        <text>It is the month of @DateTime.Now.ToString("MMMM"), and
        it's a <em>great</em> day! <br /><p>You can go swimming if it's at
        least @minTemp degrees. </p></text>
    }
    

    İlk örnek önceki örneği yineler ancak işlenmek üzere metni içine almak için tek bir etiket çifti <text> kullanır. İkinci örnekte ve etiketleri, <text> sunucu kodu ve eşleşen HTML etiketlerinin yanı sıra, tümünde bazı uncontained text ve unmatched HTML etiketleri ()<br /> bulunan üç satırı içine </text> alır. Yine, her satırın önüne işlecini @: tek tek de ekleyebilirsiniz; her iki yöntem de işe yarar.

    Not

    Bu bölümde gösterildiği gibi (HTML öğesi, @: işleç veya <text> öğe kullanarak) metin çıkışı yaptığınızda, ASP.NET çıkışı HTML kodlamaz. (Daha önce belirtildiği gibi ASP.NET, bu bölümde belirtilen özel durumlar dışında, önünde bulunan sunucu kodu ifadelerinin ve sunucu kodu bloklarının @çıkışını kodlar.)

Boşluk

Deyimdeki (ve dize değişmez değeri dışında) fazladan boşluklar deyimini etkilemez:

@{ var lastName =    "Smith"; }

Deyimdeki satır sonu deyimi üzerinde hiçbir etkiye sahip değildir ve okunabilirlik için deyimleri sarmalayabilirsiniz. Aşağıdaki deyimler aynıdır:

@{ var theName =
"Smith"; }

@{
    var
    personName
    =
    "Smith"
    ;
}

Ancak, bir dize değişmez değeri ortasında bir çizgi sarmalayamazsınız. Aşağıdaki örnek çalışmaz:

@{ var test = "This is a long
    string"; }  // Does not work!

Yukarıdaki kod gibi birden çok satıra kaydıran uzun bir dizeyi birleştirmek için iki seçenek vardır. Bu makalenin devamında göreceğiniz birleştirme işlecini ()+ kullanabilirsiniz. Bu makalede daha önce gördüğünüz gibi karakteri kullanarak düz metin dizesi değişmez değeri de @ oluşturabilirsiniz. Satırlar arasında tam dize değişmez değerlerini kesebilirsiniz:

@{ var longString = @"This is a
    long
    string";
}

Kod (ve İşaretle) Açıklamaları

Açıklamalar, kendiniz veya başkaları için not bırakmanızı sağlar. Ayrıca, çalıştırmak istemediğiniz ancak şimdilik sayfanızda tutmak istediğiniz bir kod bölümünü veya işaretlemeyi devre dışı bırakmanıza (açıklama çıkarmanıza) da olanak sağlar.

Razor kodu ve HTML işaretlemesi için farklı açıklama söz dizimi vardır. Tüm Razor kodlarında olduğu gibi, sayfa tarayıcıya gönderilmeden önce Razor açıklamaları sunucuda işlenir (ve kaldırılır). Bu nedenle, Razor açıklama söz dizimi, dosyayı düzenlerken görebileceğiniz, ancak kullanıcıların sayfa kaynağında bile göremeyecekleri açıklamaları koda (veya işaretlemeye) yerleştirmenize olanak tanır.

Razor açıklamalarını ASP.NET için, açıklamayı ile @* başlatır ve ile *@sonlarsınız. Açıklama bir satırda veya birden çok satırda olabilir:

@*  A one-line code comment. *@

@*
    This is a multiline code comment.
    It can continue for any number of lines.
*@

Kod bloğunun içindeki bir açıklama aşağıdadır:

@{
    @* This is a comment. *@
    var theVar = 17;
}

Aşağıda kod satırının çalışmaması için açıklama satırıyla aynı kod bloğu yer alır:

@{
    @* This is a comment. *@
    @* var theVar = 17;  *@
}

Kod bloğunun içinde, Razor açıklama söz dizimini kullanmaya alternatif olarak, kullanmakta olduğunuz programlama dilinin C# gibi açıklama söz dizimini kullanabilirsiniz:

@{
    // This is a comment.
    var myVar = 17;
    /* This is a multi-line comment
    that uses C# commenting syntax. */
}

C# dilinde, tek satırlı açıklamalar karakterlerden önce // , çok satırlı açıklamalar ile /* başlar ve ile */biter. (Razor açıklamalarda olduğu gibi, C# açıklamaları tarayıcıda işlenmez.)

İşaretleme için, büyük olasılıkla bildiğiniz gibi bir HTML açıklaması oluşturabilirsiniz:

<!-- This is a comment.  -->

HTML açıklamaları karakterlerle <!-- başlar ve ile -->biter. Html açıklamalarını yalnızca metni değil, sayfada tutmak ancak işlemek istemediğiniz HTML işaretlemelerini de çevrelemek için kullanabilirsiniz. Bu HTML açıklaması, etiketlerin içeriğinin tamamını ve içerdikleri metni gizler:

<!-- <p>This is my paragraph.</p>  -->

Razor açıklamalarından farklı olarak, HTML açıklamaları sayfaya işlenir ve kullanıcı sayfa kaynağını görüntüleyerek bunları görebilir.

Razor'un iç içe yerleştirilmiş C# bloklarında sınırlamaları vardır. Daha fazla bilgi için bkz . Adlandırılmış C# Değişkenleri ve İç İçe Bloklar Bozuk Kod Oluşturma

Değişkenler

Değişken, verileri depolamak için kullandığınız adlandırılmış bir nesnedir. Değişkenleri herhangi bir şekilde adlandırabilirsiniz, ancak adın alfabetik bir karakterle başlaması gerekir ve boşluk veya ayrılmış karakterler içeremez.

Değişkenler ve Veri Türleri

Değişken, değişkende ne tür verilerin depolandığını gösteren belirli bir veri türüne sahip olabilir. Dize değerlerini depolayan dize değişkenlerine ("Merhaba dünya" gibi), tam sayı değerlerini depolayan tamsayı değişkenlerine (3 veya 79 gibi) ve tarih değerlerini çeşitli biçimlerde depolayan tarih değişkenlerine (12/4/2012 veya Mart 2009 gibi) sahip olabilirsiniz. Kullanabileceğiniz başka birçok veri türü de vardır.

Ancak, genellikle bir değişken için bir tür belirtmeniz gerekmez. Çoğu zaman, ASP.NET değişkendeki verilerin nasıl kullanıldığına bağlı olarak türü anlayabilir. (Bazen bir tür belirtmeniz gerekir; bunun doğru olduğu örnekleri görürsünüz.)

Anahtar sözcüğünü var kullanarak (bir tür belirtmek istemiyorsanız) veya türün adını kullanarak bir değişken bildirirsiniz:

@{
    // Assigning a string to a variable.
    var greeting = "Welcome!";

    // Assigning a number to a variable.
    var theCount = 3;

    // Assigning an expression to a variable.
    var monthlyTotal = theCount + 5;

    // Assigning a date value to a variable.
    var today = DateTime.Today;

    // Assigning the current page's URL to a variable.
    var myPath = this.Request.Url;

    // Declaring variables using explicit data types.
    string name = "Joe";
    int count = 5;
    DateTime tomorrow = DateTime.Now.AddDays(1);
}

Aşağıdaki örnekte, bir web sayfasındaki değişkenlerin bazı tipik kullanımları gösterilmektedir:

@{
    // Embedding the value of a variable into HTML markup.
    <p>@greeting, friends!</p>

    // Using variables as part of an inline expression.
    <p>The predicted annual total is: @( monthlyTotal * 12)</p>

    // Displaying the page URL with a variable.
    <p>The URL to this page is: @myPath</p>
}

Önceki örnekleri bir sayfada birleştirirseniz, bunu tarayıcıda görürsünüz:

Razor-Img9

Veri Türlerini Dönüştürme ve Test Etme

ASP.NET genellikle bir veri türünü otomatik olarak saptayabilse de, bazen belirleyemez. Bu nedenle, açık bir dönüştürme gerçekleştirerek ASP.NET yardımcı olmanız gerekebilir. Türleri dönüştürmeniz gerekmiyor olsa bile, bazen hangi tür verilerle çalıştığınızı görmek için test etmek yararlı olabilir.

En yaygın durum, bir dizeyi tamsayı veya tarih gibi başka bir türe dönüştürmeniz gerekir. Aşağıdaki örnekte, bir dizeyi sayıya dönüştürmeniz gereken tipik bir durum gösterilmektedir.

@{
    var total = 0;

    if(IsPost) {
        // Retrieve the numbers that the user entered.
        var num1 = Request["text1"];
        var num2 = Request["text2"];
        // Convert the entered strings into integers numbers and add.
        total = num1.AsInt() + num2.AsInt();
    }
}

Kural olarak, kullanıcı girişi size dize olarak gelir. Kullanıcılardan bir sayı girmelerini isteseniz ve bir rakam girseler bile, kullanıcı girişi gönderildiğinde ve kodda okuduğunuzda veriler dize biçiminde olur. Bu nedenle, dizeyi sayıya dönüştürmeniz gerekir. Örnekte, değerleri dönüştürmeden aritmetik işlemi gerçekleştirmeye çalışırsanız, ASP.NET iki dize ekleyemediğinden aşağıdaki hata sonuçları elde eder:

'string' türü örtük olarak 'int' türüne dönüştürülemez.

Değerleri tamsayılara dönüştürmek için yöntemini çağırırsınız AsInt . Dönüştürme başarılı olursa sayıları ekleyebilirsiniz.

Aşağıdaki tabloda değişkenler için bazı yaygın dönüştürme ve test yöntemleri listelemektedir.

Yöntem

Açıklama

Örnek


AsInt(), IsInt()

Tamsayıyı temsil eden bir dizeyi ("593" gibi) tamsayıya dönüştürür.

var myIntNumber = 0;
var myStringNum = "539";
if(myStringNum.IsInt()==true){
    myIntNumber = myStringNum.AsInt();
}

AsBool(), IsBool()

"true" veya "false" gibi bir dizeyi Boole türüne dönüştürür.

var myStringBool = "True";
var myVar = myStringBool.AsBool();

AsFloat(), IsFloat()

Ondalık değeri "1,3" veya "7,439" gibi olan bir dizeyi kayan noktalı sayıya dönüştürür.

var myStringFloat = "41.432895";
var myFloatNum = myStringFloat.AsFloat();

AsDecimal(), IsDecimal()

"1,3" veya "7,439" gibi ondalık değerine sahip bir dizeyi ondalık sayıya dönüştürür. (ASP.NET ondalık sayı, kayan noktalı bir sayıdan daha kesindir.)

var myStringDec = "10317.425";
var myDecNum = myStringDec.AsDecimal();

AsDateTime(), IsDateTime()

Tarih ve saat değerini temsil eden bir dizeyi ASP.NET DateTime türüne dönüştürür.

var myDateString = "12/27/2012";
var newDate = myDateString.AsDateTime();

ToString()

Diğer veri türlerini dizeye dönüştürür.

int num1 = 17;
int num2 = 76;
// myString is set to 1776
string myString = num1.ToString() +
  num2.ToString();

İşleçler

İşleç, ASP.NET bir ifadede ne tür bir komut gerçekleştirildiğini bildiren bir anahtar sözcük veya karakterdir. C# dili (ve bunu temel alan Razor söz dizimi) birçok işleci destekler, ancak başlamak için yalnızca birkaçını tanımanız gerekir. Aşağıdaki tabloda en yaygın işleçler özetlenmiştir.

Operatör

Açıklama

Örnekler


+ - * /

Sayısal ifadelerde kullanılan matematik işleçleri.

@(5 + 13)
@{ var netWorth = 150000; }
@{ var newTotal = netWorth * 2; }
@(newTotal / 2)

=

Atama. Deyimin sağ tarafındaki değeri sol taraftaki nesneye atar.

var age = 17;

==

Eşitlik. Değerler eşitse döndürür true . (işleç ile == işleç arasındaki = ayrıma dikkat edin.)

var myNum = 15;
if (myNum == 15) {
    // Do something.
}

!=

Eşitsiz -lik. Değerler eşit değilse döndürür true .

var theNum = 13;
if (theNum != 15) {
    // Do something.
}

< > <= >=

Küçüktür, büyüktür, küçüktür veya eşittir ve büyüktür veya eşittir.

if (2 < 3) {
    // Do something.
}
var currentCount = 12;
if(currentCount >= 12) {
    // Do something.
}

+

Dizeleri birleştirmek için kullanılan birleştirme. ASP.NET, ifadenin veri türüne göre bu işleç ile toplama işleci arasındaki farkı bilir.

// The displayed result is "abcdef".
@("abc" + "def")

+= -=

Bir değişkenden 1 (sırasıyla) ekleyip çıkaran artırma ve azaltma işleçleri.

int theCount = 0;
theCount += 1; // Adds 1 to count

.

Nokta. Nesneleri ve bunların özelliklerini ve yöntemlerini ayırt etmek için kullanılır.

var myUrl = Request.Url;
var count = Request["Count"].AsInt();

()

Parantez. İfadeleri gruplandırmak ve parametreleri yöntemlere geçirmek için kullanılır.

@(3 + 7)
@Request.MapPath(Request.FilePath);

[]

Parantez. Dizilerdeki veya koleksiyonlardaki değerlere erişmek için kullanılır.

var income = Request["AnnualIncome"];

!

Olmadığınızı. Bir true değeri false tersine çevirir ve tersini yapar. Genellikle için test etmek için false kısa yol olarak kullanılır (için değil true).

bool taskCompleted = false;
// Processing.
if(!taskCompleted) {
    // Continue processing
}

&& ||

Mantıksal AND ve VEYA, koşulları birbirine bağlamak için kullanılır.

bool myTaskCompleted = false;
int totalCount = 0;
// Processing.
if(!myTaskCompleted && totalCount < 12) {
    // Continue processing.
}

Kodda Dosya ve Klasör Yolları ile Çalışma

Genellikle kodunuzdaki dosya ve klasör yollarıyla çalışırsınız. Geliştirme bilgisayarınızda görünebileceği için bir web sitesi için fiziksel klasör yapısı örneği aşağıda verilmiştir:

C:\WebSites\MyWebSite default.cshtml datafile.txt \images Logo.jpg \styles Styles.css

URL'ler ve yollar hakkında bazı temel ayrıntılar şunlardır:

  • URL bir etki alanı adı (http://www.example.com) veya sunucu adı (http://localhost, http://mycomputer) ile başlar.
  • URL, konak bilgisayardaki fiziksel bir yola karşılık gelir. Örneğin, http://myserver sunucudaki C:\websites\mywebsite klasörüne karşılık gelebilir.
  • Sanal yol, tam yolu belirtmek zorunda kalmadan koddaki yolları göstermek için kısaltmadır. Url'nin etki alanı veya sunucu adından sonra gelen bölümünü içerir. Sanal yollar kullandığınızda, yolları güncelleştirmek zorunda kalmadan kodunuzu farklı bir etki alanına veya sunucuya taşıyabilirsiniz.

Farklılıkları anlamanıza yardımcı olacak bir örnek aşağıda verilmiştır:

Url'yi tamamlama http://mycompanyserver/humanresources/CompanyPolicy.htm
Sunucu adı mycompanyserver
Sanal yol /humanresources/CompanyPolicy.htm
Fiziksel yol C:\mywebsites\humanresources\CompanyPolicy.htm

Sanal kök , C: sürücünüzün kökü gibi / şeklindedir. (Sanal klasör yolları her zaman eğik çizgi kullanır.) Bir klasörün sanal yolunun fiziksel klasörle aynı ada sahip olması gerekmez; diğer ad olabilir. (Üretim sunucularında sanal yol nadiren tam bir fiziksel yolla eşleşir.)

Koddaki dosya ve klasörlerle çalışırken, üzerinde çalıştığınız nesnelere bağlı olarak bazen fiziksel yola, bazen de sanal yola başvurmanız gerekir. ASP.NET size koddaki dosya ve klasör yollarıyla çalışmaya yönelik şu araçları sağlar: Server.MapPath yöntemi, ~ işleci ve Href yöntemi.

Sanalı fiziksel yollara dönüştürme: Server.MapPath yöntemi

Server.MapPath yöntemi, bir sanal yolu (/default.cshtml gibi) mutlak bir fiziksel yola (C:\WebSites\MyWebSiteFolder\default.cshtml gibi) dönüştürür. Tam bir fiziksel yola ihtiyaç duyduğunuzda bu yöntemi kullanırsınız. Tipik bir örnek, web sunucusunda bir metin dosyası veya görüntü dosyası okurken veya yazarkendir.

Genellikle bir barındırma sitesinin sunucusundaki sitenizin mutlak fiziksel yolunu bilmezsiniz, bu nedenle bu yöntem bildiğiniz yolu (sanal yol) sizin için sunucudaki ilgili yola dönüştürebilir. Sanal yolu yönteme bir dosya veya klasöre geçirirsiniz ve fiziksel yolu döndürür:

@{
    var dataFilePath = "~/dataFile.txt";
}
<!-- Displays a physical path C:\Websites\MyWebSite\datafile.txt  -->
<p>@Server.MapPath(dataFilePath)</p>

Sanal köke başvurma: ~ işleci ve Href yöntemi

.cshtml veya .vbhtml dosyasında işlecini ~ kullanarak sanal kök yola başvurabilirsiniz. Bu çok kullanışlıdır, çünkü bir sitede sayfaları taşıyabilirsiniz ve diğer sayfalara içerdikleri bağlantılar bozulmaz. Web sitenizi başka bir konuma taşımanız durumunda da kullanışlıdır. İşte bazı örnekler:

@{
    var myImagesFolder = "~/images";
    var myStyleSheet = "~/styles/StyleSheet.css";
}

Web sitesi ise http://myserver/myapp, sayfa çalıştırıldığında ASP.NET bu yolları şu şekilde ele alır:

  • myImagesFolder: http://myserver/myapp/images
  • myStyleSheet : http://myserver/myapp/styles/Stylesheet.css

(Bu yolları aslında değişkenin değerleri olarak görmezsiniz, ancak ASP.NET yolları olduğu gibi ele alır.)

işlecini ~ hem sunucu kodunda (yukarıda olduğu gibi) hem de işaretlemede kullanabilirsiniz, örneğin:

<!-- Examples of using the ~ operator in markup in ASP.NET Web Pages -->

<a href="~/Default">Home</a>
<img src="~/images/MyImages.png" />

İşaretlem içinde, işlecini ~ kullanarak görüntü dosyaları, diğer web sayfaları ve CSS dosyaları gibi kaynakların yollarını oluşturursunuz. Sayfa çalıştığında, ASP.NET sayfayı (hem kod hem de işaretleme) arar ve tüm ~ başvuruları uygun yola çözümler.

Koşullu Mantık ve Döngüler

ASP.NET sunucu kodu, koşullara göre görevleri gerçekleştirmenize ve deyimleri belirli bir sayıda tekrarlayan kod yazmanıza (döngü çalıştıran kod) olanak tanır.

Test Koşulları

Basit bir koşulu test etmek için, belirttiğiniz teste göre true veya false döndüren deyimini kullanırsınız if :

@{
  var showToday = true;
  if(showToday)
  {
    @DateTime.Today;
  }
}

anahtar if sözcüğü bir blok başlatır. Gerçek test (koşul) parantez içindedir ve true veya false döndürür. Test true ise çalıştırılan deyimler küme ayraçları içine alınır. Bir if deyim, koşul false olduğunda çalıştırılacak deyimleri belirten bir else blok içerebilir:

@{
  var showToday = false;
  if(showToday)
  {
    @DateTime.Today;
  }
  else
  {
    <text>Sorry!</text>
  }
}

Blok kullanarak else if birden çok koşul ekleyebilirsiniz:

@{
    var theBalance = 4.99;
    if(theBalance == 0)
    {
        <p>You have a zero balance.</p>
    }
    else if (theBalance  > 0 && theBalance <= 5)
    {
        <p>Your balance of $@theBalance is very low.</p>
    }
    else
    {
        <p>Your balance is: $@theBalance</p>
    }
}

Bu örnekte, if bloğundaki ilk koşul true değilse, else if koşul işaretlenir. Bu koşul karşılanırsa, bloktaki else if deyimler yürütülür. Koşulların hiçbiri karşılanmazsa, bloktaki else deyimler yürütülür. Başka sayıda eğer bloğu ekleyebilir ve ardından "diğer her şey" koşulu olarak bir else blokla kapatabilirsiniz.

Çok sayıda koşulu test etmek için bir switch blok kullanın:

@{
    var weekday = "Wednesday";
    var greeting = "";

    switch(weekday)
    {
        case "Monday":
            greeting = "Ok, it's a marvelous Monday";
            break;
        case "Tuesday":
            greeting = "It's a tremendous Tuesday";
            break;
        case "Wednesday":
            greeting = "Wild Wednesday is here!";
            break;
        default:
            greeting = "It's some other day, oh well.";
            break;
    }

    <p>Since it is @weekday, the message for today is: @greeting</p>
}

Sınanacak değer parantez içindedir (örnekte weekday değişken). Her test iki nokta üst üste (:)) ile biten bir deyim kullanır case . Deyimin case değeri test değeriyle eşleşiyorsa, bu durumdaki kod bloğu yürütülür. Her servis talebi deyimini bir break deyimiyle kapatırsınız. (Her case blokta kesme eklemeyi unutursanız, sonraki case deyimdeki kod da çalıştırılır.) Blokta switchdefault genellikle diğer durumların hiçbiri doğru değilse çalışan bir "diğer her şey" seçeneği için son durum olarak deyimi bulunur.

Tarayıcıda görüntülenen son iki koşullu bloğun sonucu:

Razor-Img10

Döngü Kodu

Genellikle aynı deyimleri tekrar tekrar çalıştırmanız gerekir. Bunu döngü yaparak yaparsınız. Örneğin, genellikle bir veri koleksiyonundaki her öğe için aynı deyimleri çalıştırırsınız. Tam olarak kaç kez döngü yapmak istediğinizi biliyorsanız bir for döngü kullanabilirsiniz. Bu döngü türü özellikle sayım veya geri sayım için kullanışlıdır:

@for(var i = 10; i < 21; i++)
{
    <p>Line #: @i</p>
}

Döngü anahtar sözcüğüyle for başlar ve ardından her biri noktalı virgülle sonlandırılan parantez içindeki üç deyimi izler.

  • Parantez içinde, ilk deyim (var i=10;) bir sayaç oluşturur ve 10'a başlatır. Sayacı i adlandırmanız gerekmez; herhangi bir değişken kullanabilirsiniz. for Döngü çalıştırıldığında sayaç otomatik olarak artırılır.
  • İkinci deyim (i < 21;), ne kadar saymak istediğinize ilişkin koşulu ayarlar. Bu durumda, en fazla 20'ye gitmesini istiyorsunuz (yani sayaç 21'den küçükken devam edin).
  • Üçüncü deyim (i++ ) bir artırma işleci kullanır. Bu, döngü her çalıştığında sayacın buna 1 eklenmesi gerektiğini belirtir.

Küme ayraçlarının içinde döngünün her yinelemesi için çalıştırılacak kod bulunur. İşaretleme her seferinde yeni bir paragraf (<p> öğesi) oluşturur ve çıkışa değerini (sayaç) görüntüleyen i bir satır ekler. Bu sayfayı çalıştırdığınızda, örnek çıktıyı görüntüleyen 11 satır oluşturur ve her satırdaki metin öğe numarasını gösterir.

Razor-Img11

Bir koleksiyon veya diziyle çalışıyorsanız, genellikle bir foreach döngü kullanırsınız. Koleksiyon benzer nesneler grubudur ve döngü, koleksiyondaki foreach her öğe üzerinde bir görev gerçekleştirmenize olanak tanır. Bu döngü türü koleksiyonlar için uygundur, çünkü döngüden for farklı olarak sayacı artırmanız veya bir sınır ayarlamanız gerekmez. Bunun yerine döngü kodu, foreach tamamlanana kadar koleksiyonda devam eder.

Örneğin, aşağıdaki kod koleksiyondaki Request.ServerVariables öğeleri döndürür. Bu, web sunucunuz hakkında bilgi içeren bir nesnedir. Madde işaretli HTML listesinde yeni <li> bir foreac öğe oluşturarak her öğenin adını görüntülemek için bir h döngüsü kullanır.

<ul>
@foreach (var myItem in Request.ServerVariables)
{
    <li>@myItem</li>
}
</ul>

anahtar sözcüğünün foreach ardından, koleksiyondaki tek bir öğeyi temsil eden bir değişken bildirdiğiniz parantezler (örnekte), var itemardından in anahtar sözcüğü ve ardından döngü yapmak istediğiniz koleksiyon gösterilir. Döngünün gövdesinde foreach , daha önce bildirdiğiniz değişkeni kullanarak geçerli öğeye erişebilirsiniz.

Razor-Img12

Daha genel amaçlı bir döngü oluşturmak için deyimini while kullanın:

@{
    var countNum = 0;
    while (countNum < 50)
    {
        countNum += 1;
        <p>Line #@countNum: </p>
    }
}

Döngü while anahtar sözcüğüyle başlar ve ardından döngünün while ne kadar süreyle devameceğini belirttiğiniz parantezler (burada, 50'den az olduğu sürece countNum ) ve ardından bloğun yineleneceğini belirtirsiniz. Döngüler genellikle sayma için kullanılan bir değişkeni veya nesneyi artırır (ekleme) veya azaltma (çıkarma). Örnekte işleç, += döngü her çalıştığında 1 countNum ekler. (Geri sayan bir döngüdeki bir değişkeni küçültmek için azaltma işlecini -=kullanabilirsiniz).

Nesneler ve Koleksiyonlar

bir ASP.NET web sitesindeki neredeyse her şey, web sayfasının kendisi de dahil olmak üzere bir nesnedir. Bu bölümde, kodunuzda sık sık çalışacağınız bazı önemli nesneler ele alınmaktadır.

Sayfa Nesneleri

ASP.NET'daki en temel nesne sayfadır. Herhangi bir uygun nesne olmadan sayfa nesnesinin özelliklerine doğrudan erişebilirsiniz. Aşağıdaki kod, sayfanın nesnesini kullanarak Request sayfanın dosya yolunu alır:

@{
    var path = Request.FilePath;
}

Geçerli sayfa nesnesinde özelliklere ve yöntemlere başvurduğunuz açıkça belirtilmesi için, isteğe bağlı olarak anahtar sözcüğünü this kullanarak kodunuzdaki sayfa nesnesini temsil edebilirsiniz. Sayfayı temsil etmek için eklenmiş olan önceki kod örneği this aşağıda verilmiştir:

@{
    var path = this.Request.FilePath;
}

Aşağıdakiler gibi çok fazla bilgi almak için nesnenin özelliklerini Page kullanabilirsiniz:

  • Request. Daha önce gördüğünüz gibi, bu, isteğin ne tür bir tarayıcı tarafından yapıldığı, sayfanın URL'si, kullanıcı kimliği vb. dahil olmak üzere geçerli istekle ilgili bir bilgi koleksiyonudur.

  • Response. Bu, sunucu kodunun çalışması tamamlandığında tarayıcıya gönderilecek yanıt (sayfa) hakkında bilgi koleksiyonudur. Örneğin, yanıta bilgi yazmak için bu özelliği kullanabilirsiniz.

    @{
        // Access the page's Request object to retrieve the Url.
        var pageUrl = this.Request.Url;
    }
    <a href="@pageUrl">My page</a>
    

Koleksiyon Nesneleri (Diziler ve Sözlükler)

Koleksiyon, veritabanındaki bir nesne koleksiyonu gibi aynı türde bir nesne grubudurCustomer. ASP.NET, koleksiyon gibi Request.Files birçok yerleşik koleksiyon içerir.

Genellikle koleksiyonlardaki verilerle çalışırsınız. İki yaygın koleksiyon türü dizi ve sözlüktür. Dizi, benzer öğelerden oluşan bir koleksiyonu depolamak istediğinizde ancak her öğeyi barındıracak ayrı bir değişken oluşturmak istemediğinizde yararlıdır:

@* Array block 1: Declaring a new array using braces. *@
@{
    <h3>Team Members</h3>
    string[] teamMembers = {"Matt", "Joanne", "Robert", "Nancy"};
    foreach (var person in teamMembers)
    {
        <p>@person</p>
    }
}

Dizilerle, , intveya DateTimegibi stringbelirli bir veri türünü bildirirsiniz. Değişkenin bir dizi içerebileceğini belirtmek için bildirime köşeli ayraçlar eklersiniz (veya int[]gibistring[]). Dizideki öğelere konumlarını (dizin) veya deyimini foreach kullanarak erişebilirsiniz. Dizi dizinleri sıfır tabanlıdır; diğer bir deyişle, ilk öğe 0 konumunda, ikinci öğe 1 konumundadır ve bu şekilde devam eder.

@{
    string[] teamMembers = {"Matt", "Joanne", "Robert", "Nancy"};
    <p>The number of names in the teamMembers array: @teamMembers.Length </p>
    <p>Robert is now in position: @Array.IndexOf(teamMembers, "Robert")</p>
    <p>The array item at position 2 (zero-based) is @teamMembers[2]</p>
    <h3>Current order of team members in the list</h3>
    foreach (var name in teamMembers)
    {
        <p>@name</p>
    }
    <h3>Reversed order of team members in the list</h3>
    Array.Reverse(teamMembers);
    foreach (var reversedItem in teamMembers)
    {
        <p>@reversedItem</p>
    }
}

Bir dizideki öğe sayısını, özelliğini alarak Length belirleyebilirsiniz. Dizideki belirli bir öğenin konumunu almak için (dizide arama yapmak için) yöntemini kullanın Array.IndexOf . Ayrıca bir dizinin içeriğini ters çevirme ( Array.Reverse yöntem) veya içeriği sıralama ( Array.Sort yöntem) gibi işlemler de yapabilirsiniz.

Tarayıcıda görüntülenen dize dizisi kodunun çıktısı:

Razor-Img13

Sözlük, ilgili değeri ayarlamak veya almak için anahtarı (veya adı) sağladığınız anahtar/değer çiftleri koleksiyonudur:

@{
    var myScores = new Dictionary<string, int>();
    myScores.Add("test1", 71);
    myScores.Add("test2", 82);
    myScores.Add("test3", 100);
    myScores.Add("test4", 59);
}
<p>My score on test 3 is: @myScores["test3"]%</p>
@{myScores["test4"] = 79;}
<p>My corrected score on test 4 is: @myScores["test4"]%</p>

Sözlük oluşturmak için anahtar sözcüğünü new kullanarak yeni bir sözlük nesnesi oluşturduğunuzu belirtirsiniz. Anahtar sözcüğünü kullanarak var bir değişkene sözlük atayabilirsiniz. Sözlükteki öğelerin veri türlerini köşeli ayraç ( < > ) kullanarak belirtirsiniz. Bildirimin sonuna bir çift parantez eklemeniz gerekir çünkü bu aslında yeni bir sözlük oluşturan bir yöntemdir.

Sözlüğe öğe eklemek için sözlük değişkeninin Add yöntemini çağırabilir (myScores bu örnekte) ve ardından bir anahtar ve değer belirtebilirsiniz. Alternatif olarak, aşağıdaki örnekte olduğu gibi anahtarı belirtmek ve basit bir atama yapmak için köşeli ayraç kullanabilirsiniz:

myScores["test4"] = 79;

Sözlükten bir değer almak için anahtarı köşeli ayraç içinde belirtirsiniz:

var testScoreThree = myScores["test3"];

Parametrelerle Yöntemleri Çağırma

Bu makalenin önceki bölümlerinde okuduğunuz gibi, ile programladığınız nesnelerin yöntemleri olabilir. Örneğin, bir Database nesnenin yöntemi Database.Connect olabilir. Birçok yöntemin bir veya daha fazla parametresi de vardır. Parametre, yönteminin görevini tamamlamasını sağlamak için yönteme geçirdiğiniz bir değerdir. Örneğin, üç parametre alan yöntemi için Request.MapPath bir bildirime bakın:

public string MapPath(string virtualPath, string baseVirtualDir, 
    bool allowCrossAppMapping);

(Satır, daha okunabilir hale getirmek için sarmalanmıştır. Tırnak içine alınmış dizelerin dışında hemen her yere satır sonları koyabileceğinizi unutmayın.)

Bu yöntem, belirtilen sanal yola karşılık gelen sunucuda fiziksel yolu döndürür. yöntemi için üç parametre , baseVirtualDirve allowCrossAppMappingşeklindedirvirtualPath. (Bildirimde parametrelerin kabul ettikleri verilerin veri türleriyle listelendiğine dikkat edin.) Bu yöntemi çağırdığınızda, üç parametrenin de değerlerini sağlamanız gerekir.

Razor söz dizimi, parametreleri bir yönteme geçirmek için size iki seçenek sunar: konumsal parametreler ve adlandırılmış parametreler. Konumsal parametreleri kullanarak bir yöntemi çağırmak için, parametreleri yöntem bildiriminde belirtilen katı bir sırada geçirirsiniz. (Bu sırayı genellikle yöntemin belgelerini okuyarak anlarsınız.) Sırayı izlemeniz gerekir ve parametrelerin hiçbirini atlayamazsınız; gerekirse, boş bir dize ("") veya null değeri olmayan konumsal parametreyi geçirirsiniz.

Aşağıdaki örnekte, web sitenizde betikler adlı bir klasörünüz olduğu varsayılır. Kod yöntemini çağırır Request.MapPath ve üç parametrenin değerlerini doğru sırada geçirir. Ardından, sonuçta elde edilen eşlenmiş yolu görüntüler.

@{
    // Pass parameters to a method using positional parameters.
    var myPathPositional = Request.MapPath("/scripts", "/", true);
}
<p>@myPathPositional</p>

Bir yöntemin birçok parametresi olduğunda, adlandırılmış parametreleri kullanarak kodunuzu daha okunabilir tutabilirsiniz. Adlandırılmış parametreleri kullanarak bir yöntemi çağırmak için parametre adını ve ardından iki nokta üst üste (:) ve ardından değeri belirtin. Adlandırılmış parametrelerin avantajı, bunları istediğiniz sırada geçirebilmenizdir. (Dezavantajı, yöntem çağrısının sıkıştırılmış olmamasıdır.)

Aşağıdaki örnekte yukarıdakiyle aynı yöntem çağrılır, ancak değerleri sağlamak için adlandırılmış parametreler kullanılır:

@{
    // Pass parameters to a method using named parameters.
    var myPathNamed = Request.MapPath(baseVirtualDir: "/", 
        allowCrossAppMapping: true, virtualPath: "/scripts");
}
<p>@myPathNamed</p>

Gördüğünüz gibi parametreler farklı bir sırada geçirilir. Ancak, önceki örneği ve bu örneği çalıştırırsanız, aynı değeri döndürürler.

Hataları İşleme

Try-Catch Deyimleri

Genellikle kodunuzda denetiminizin dışındaki nedenlerle başarısız olabilecek deyimler bulunur. Örnek:

  • Kodunuz bir dosya oluşturmaya veya dosyaya erişmeye çalışırsa, her türlü hata oluşabilir. İstediğiniz dosya mevcut olmayabilir, kilitli olabilir, kodun izinleri olmayabilir vb.
  • Benzer şekilde, kodunuz bir veritabanındaki kayıtları güncelleştirmeye çalışırsa izin sorunları olabilir, veritabanı bağlantısı bırakılabilir, kaydedilecek veriler geçersiz olabilir vb.

Programlama açısından bu durumlara özel durum adı verilir. Kodunuz bir özel durumla karşılaşırsa, kullanıcılar için en iyi durumda rahatsız edici olan bir hata iletisi oluşturur (oluşturur):

Razor-Img14

Kodunuzun özel durumlarla karşılaşabileceği durumlarda ve bu tür hata iletilerini önlemek için deyimleri kullanabilirsiniz try/catch . deyiminde try , denetlediğiniz kodu çalıştırırsınız. Bir veya daha fazla catch deyimde, oluşmuş olabilecek belirli hataları (belirli özel durum türleri) arayabilirsiniz. Tahmin ettiğiniz hataları aramak için ihtiyaç duyduğunuz sayıda catch deyim ekleyebilirsiniz.

Not

Yöntemi deyimlerinde try/catch kullanmaktan Response.Redirect kaçınmanızı öneririz, çünkü bu durum sayfanızda bir özel duruma neden olabilir.

Aşağıdaki örnek, ilk istekte bir metin dosyası oluşturan ve ardından kullanıcının dosyayı açmasına olanak tanıyan bir düğme görüntüleyen bir sayfayı gösterir. Örnek, özel duruma neden olması için kasıtlı olarak hatalı bir dosya adı kullanır. Kod, iki olası özel durumun deyimlerini içerir catch : FileNotFoundExceptiondosya adı hatalıysa oluşan ve DirectoryNotFoundExceptionASP.NET klasörü bile bulamıyorsa oluşan deyimleri. (Her şey düzgün çalıştığında nasıl çalıştığını görmek için örnekteki bir deyimin açıklamasını kaldırabilirsiniz.)

Kodunuz özel durumu işlemediyse, önceki ekran görüntüsü gibi bir hata sayfası görürsünüz. Ancak, try/catch bölümü kullanıcının bu tür hataları görmesini önlemeye yardımcı olur.

@{
    var dataFilePath = "~/dataFile.txt";
    var fileContents = "";
    var physicalPath = Server.MapPath(dataFilePath);
    var userMessage = "Hello world, the time is " + DateTime.Now;
    var userErrMsg = "";
    var errMsg = "";

    if(IsPost)
    {
        // When the user clicks the "Open File" button and posts
        // the page, try to open the created file for reading.
        try {
            // This code fails because of faulty path to the file.
            fileContents = File.ReadAllText(@"c:\batafile.txt");

            // This code works. To eliminate error on page,
            // comment the above line of code and uncomment this one.
            //fileContents = File.ReadAllText(physicalPath);
        }
        catch (FileNotFoundException ex) {
            // You can use the exception object for debugging, logging, etc.
            errMsg = ex.Message;
            // Create a friendly error message for users.
            userErrMsg = "A file could not be opened, please contact "
                + "your system administrator.";
        }
        catch (DirectoryNotFoundException ex) {
            // Similar to previous exception.
            errMsg = ex.Message;
            userErrMsg = "A directory was not found, please contact "
                + "your system administrator.";
        }
    }
    else
    {
        // The first time the page is requested, create the text file.
        File.WriteAllText(physicalPath, userMessage);
    }
}

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Try-Catch Statements</title>
    </head>
    <body>
    <form method="POST" action="" >
      <input type="Submit" name="Submit" value="Open File"/>
    </form>

    <p>@fileContents</p>
    <p>@userErrMsg</p>

    </body>
</html>

Ek Kaynaklar

Visual Basic ile programlama

Ek: Visual Basic Dili ve Sözdizimi

Başvuru Belgeleri

ASP.NET

C# Dili