Aracılığıyla paylaş


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

tarafından Tom FitzMacken

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

Öğreneceğiniz şeyler:

  • 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ı.
  • ASP.NET sunucu kodunun ve Razor söz diziminin konusu.

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 bazı ipuçları listelenmiştir.

Not

Razor söz dizimi C# programlama dilini temel alır ve ASP.NET Web Sayfaları ile 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 and syntax ekine bakın.

Bu programlama tekniklerinin çoğu hakkında daha fazla ayrıntıyı makalenin devamında bulabilirsiniz.

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 Kodlama

Ö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 yorumlamak yerine karakterlerin bir web sayfasında karakter olarak görüntülenmesini sağlayan kodlarla değiştirir. HTML kodlaması olmadan, sunucu kodunuzdan gelen çı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 çıkarmaksa (örneğin<p></p>, bir paragraf veya <em></em> metni vurgulama), bu makalenin devamında Yer alan Kod Bloklarında Metin, İşaretleme ve Kodu 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 sonlandırabilirsiniz

Bir kod bloğunun içinde, tam kod deyimlerinin her birinin noktalı virgülle bitmesi gerekir. Satır içi ifadeler noktalı virgülle bitmez.

<!-- 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. kullanarak @değişken değerlerini 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. Sabit 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 bir 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

Karakterin @ 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 değerini "Jones" yerine "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 kısmı nesneleri içerir

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 özelliği Text vardır (diğerleri arasında), istek nesnesinin özelliği Url vardır, e-posta iletisinin bir From özelliği 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 hangi tarayıcı türü, 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 Request yönteminin 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 deyimi (ve isteğe bağlı else deyimi) iledirif.

@{
   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. if Deyimlerin yanı sıra, bu makalenin devamında açıklanan koşulları test etmenin, kod bloklarını yinelemenin vb. ç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 bir sayfa istediğinde, sayfa GET kullanılarak istenir. Kullanıcı bir form doldurur ve sonra bir gönder düğmesine tıklarsa, tarayıcı sunucuya bir POST isteğinde bulunur.

Web programlamada, sayfanın nasıl işlendiğini bilmeniz için bir sayfanın GET veya POST olarak istenip istenmediğini bilmek genellikle yararlıdır. ASP.NET Web Sayfaları'nda, isteğin IsPost GET mi yoksa POST mu olduğunu görmek için özelliğini kullanabilirsiniz. İstek bir POST ise, IsPost özelliği true döndürür ve bir formdaki metin kutularının değerlerini okuma gibi işlemler yapabilirsiniz. Göreceğiniz birçok örnek, değerine IsPostbağlı olarak sayfayı farklı bir şekilde işlemeyi 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. Sayfadaki her şeyi değiştirerek aşağıdaki kodu ve işaretlemeyi sayfaya kopyalayın.

    @{
        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:

    • Karakter @ , sayfadaki ilk kod bloğunu başlatır ve sayfanın altına yakın bir şekilde eklenmiş olan değişkenin önüne 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 değişmez 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ının üstteki değişkenle tam olarak eşleşmesi gerekir.
    • İfade num1.AsInt() + num2.AsInt() , nesneler ve yöntemlerle nasıl çalışılıp çalışılamı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şlemi 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ılır ve sayıların eklenmesinin sonucu görüntülenir.
  3. Sayfayı kaydedin ve tarayıcıda çalıştırın. (Sayfanın Çalışma alanını çalıştırmadan önce dosyalar.) İ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ıyla ilgili hızlı bir tur. Yine de, ASP.NET Web Sayfalarını kullanmaya başlamak için ihtiyacınız olan hemen hemen her şeyi kapsar.

Ama önce biraz teknik bir geçmişim var.

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ırarak, sunucu tabanlı veritabanlarına erişme gibi yalnızca istemci içeriğini kullanarak yapmak ç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 tüm 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 web sayfalarının özel bir dosya uzantısı (.cshtml veya .vbhtml) ASP.NET. 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 sığıyor?

Razor söz dizimi, Microsoft'un ASP.NET adlı teknolojisini temel alır ve bu da Microsoft .NET Framework'e dayanır. The.NET Framework, Microsoft'un neredeyse her tür bilgisayar uygulamasını geliştirmeye yönelik büyük, kapsamlı bir programlama çerçevesidir. ASP.NET, .NET Framework'ün web uygulamaları oluşturmak için özel olarak tasarlanmış bölümüdür. Geliştiriciler, ASP.NET kullanarak dünyanın en büyük ve en yüksek trafikli web sitelerinden birçoğu oluşturdu. (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 ve uzmansanız daha üretken olmanıza olanak tanıyan 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ırayla 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, bir müşteri nesnesinin örneğini oluşturur (veya örneğini oluşturur). Her müşteri sınıfın Customer ayrı bir örneğidir. 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 web sayfaları da sınıfın Page bir örneği olan bir nesnedirPage. Sayfadaki düğme, sınıfın bir örneği Button olan bir nesnedir Button 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 olacaktır. 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 genellikle sayfaya metin veya işaretleme (veya her ikisini birden) çıkarmak istersiniz. Sunucu kod 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 öğesi 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 çözümler.

  • işlecini @: <text> veya öğesini kullanın. düz @: metin veya eşleşmeyen HTML etiketleri içeren tek bir içerik satırı verir; <text> öğ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> öğe içine alabilirsiniz. İşleç @: gibi etiketler de<text> ASP.NET tarafından metin içeriğini tanımlamak için 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ı kaplar.</text> Yine, her satırın önüne işlecini @: tek tek de ekleyebilirsiniz; her iki şekilde de çalışır.

    Not

    Bu bölümde gösterildiği gibi bir HTML öğesi, @: işleç veya <text> öğe kullanarak metin çıkışı yaptığınızda, ASP.NET çıkışı HTML ile 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.)

Whitespace

Deyimdeki (ve dize değişmez değeri dışında) fazladan boşluklar deyimi 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, dize değişmez değeri ortasında bir çizgi sarmalayamazsınız. Aşağıdaki örnek çalışmıyor:

@{ 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ıza olanak 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 satırı yapmanızı) 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 Razor açıklamaları da sayfa tarayıcıya gönderilmeden önce 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ğu içinde 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ın // önüne karakterler eklenir ve çok satırlı açıklamalar ile /* başlar ve ile */biter. (Razor açıklamalarda olduğu gibi, C# açıklamaları da tarayıcıda işlenmez.)

İşaretlemeyi 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, aynı zamanda sayfada tutmak isteyebileceğiniz ancak işlemek istemediğiniz HTML işaretlemelerini de çevrelemek için kullanabilirsiniz. Bu HTML açıklaması, etiketlerin ve içerdikleri metnin tamamını 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'ın 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 her şeyi 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), tamsayı 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 örnekler görürsünüz.)

Bir değişkeni anahtar sözcüğünü var kullanarak (tür belirtmek istemiyorsanız) veya türün adını kullanarak 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, bunun tarayıcıda görüntülendiğini 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 belirleyebilir ancak 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 gerekmeyecek olsa bile, bazen hangi tür verilerle çalışıyor olabileceğinizi test etmek yararlı olabilir.

En yaygın durum, bir dizeyi bir 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 bir 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 sonucu verir:

'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()

"1,3" veya "7,439" gibi ondalık değeri 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 nokta sayısından 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ştireceklerini söyleyen 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.

Operator

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 . (İşleç ile == işleç arasındaki = ayrıma dikkat edin.)

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

!=

Eşitsizlik. 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 ekleme işleci arasındaki farkı bilir.

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

+= -=

Bir değişkene 1 (sırasıyla) ekleyip çıkaran artış 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 yöntemlere parametre 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"];

!

Değil. Bir true değeri false ters çevirir ve tersi de geçerlidir. 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 kodunuzda 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. Bir URL'nin etki alanı veya sunucu adını izleyen 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şti:

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, koddaki dosya ve klasör yollarıyla çalışmaya yönelik şu araçları sağlar: Server.MapPath yöntemi ve ~ 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 yazarken oluşturulduğunda gösteriliyor.

Genellikle barındırma sitesinin sunucusunda 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ü sitedeki sayfaları taşıyabilirsiniz ve bu sayfaların diğer sayfalara olan bağlantıları bozulmaz. Web sitenizi farklı bir konuma taşımanız durumunda da kullanışlıdır. Burada bazı örnekler verilmiştir:

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

Web sitesi ise http://myserver/myapp, sayfa çalıştırıldığında ASP.NET bu yollara şu şekilde davranı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 yollara öyleymiş gibi davranı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" />

İşaretlemeyi 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 (bir 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 olduğunda ç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 doğru değilse, else if koşul denetlendi. 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. Bloklar halinde istediğiniz sayıda başka öğe 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 . Bir case deyiminin değeri test değeriyle eşleşiyorsa, bu durumdaki kod bloğu yürütülür. Her servis talebi deyimini bir break deyimle kapatırsınız. (Her case blokta kesme eklemeyi unutursanız, sonraki case deyimdeki kod da çalıştırılır.) Blok switch genellikle diğer durumlardan hiçbiri doğru değilse çalışan bir "diğer her şey" seçeneği için son durum olarak bir deyime sahiptir default .

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 döngü kullanabilirsiniz for . Bu döngü türü özellikle sayma veya geri sayma 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 her biri noktalı virgülle sonlandırılan parantez içinde üç deyimle başlar.

  • 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ış 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> öğe) 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 nesnelerden oluşan bir gruptur ve foreach döngü, koleksiyondaki her öğe üzerinde bir görev gerçekleştirmenizi sağlar. Bu döngü türü koleksiyonlar için kullanışlıdır, çü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, web sunucunuz hakkında bilgi içeren bir nesne olan koleksiyondaki Request.ServerVariables öğeleri döndürür. Html madde işaretli listede 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 foreach ardından, koleksiyondaki tek bir öğeyi temsil eden bir değişken bildirdiğiniz parantezler (örnekte, var item) ve ardı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 devamleneceğini belirttiğiniz parantezler (burada, 50'den küçük olduğu sürece countNum ) ve ardından yinelenecek bloğu belirtirsiniz. Döngüler genellikle sayma için kullanılan bir değişkeni veya nesneyi artırır (ekler) 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 azaltmak için azaltma işlecini -=kullanabilirsiniz).

Nesneler ve Koleksiyonlar

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. Sayfa nesnesinin özelliklerine uygun herhangi bir nesne olmadan 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 birçok bilgi almak için nesnesinin ö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 Customer gibi aynı türde bir nesne grubudur. 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 tutmak için ayrı bir değişken oluşturmak istemediğinizde kullanışlı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ç eklersiniz (veya gibi string[] int[]). Dizideki öğelere konumlarını (dizin) veya deyimini foreach kullanarak erişebilirsiniz. Dizi dizinleri sıfır tabanlıdır; yani 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 ( Array.Sort yöntem) sıralama gibi işlemler de yapabilirsiniz.

Tarayıcıda görüntülenen dize dizisi kodunun çıkışı:

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 sonunda 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 yöntemini çağırabilir Add (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 bir Database.Connect yöntemi olabilir. Birçok yöntemin de bir veya daha fazla parametresi vardır. Parametre, yönteminin görevini tamamlayabilmesini sağlamak için bir 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 olması için sarmalandı. Tırnak içine alınmış dizelerin içindekiler dışında neredeyse 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 birlikte 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 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 bilirsiniz.) Sırayı izlemeniz gerekir ve parametrelerin hiçbirini atlayamazsınız; gerekirse, boş bir dize ("") veya null değeri olmayan bir konumsal parametre 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 belirtirsiniz. Adlandırılmış parametrelerin avantajı, bunları istediğiniz sırada geçirebilmenizdir. (Dezavantaj, yöntem çağrısının kompakt olmamasıdır.)

Aşağıdaki örnek yukarıdakiyle aynı yöntemi çağırır, ancak değerleri sağlamak için adlandırılmış parametreler kullanı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ırayla 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

Kodunuzda genellikle denetiminizin dışındaki nedenlerle başarısız olabilecek deyimleriniz olur. Örneğin:

  • 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 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 gereken kadar 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 örnekte, ilk istekte bir metin dosyası oluşturan ve ardından kullanıcının dosyayı açmasına izin veren bir düğme görüntüleyen bir sayfa gösterilmektedir. Örnek, özel duruma neden olması için kasıtlı olarak hatalı bir dosya adı kullanır. Kod, iki olası özel durum için deyimler içerir catch : FileNotFoundExceptiondosya adı hatalıysa oluşur ve DirectoryNotFoundExceptionASP.NET klasörü bile bulamazsa oluşur. (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üne benzer bir hata sayfası görürsünüz. Ancak bu bölüm, try/catch 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öz Dizimi

Başvuru Belgeleri

ASP.NET

C# Dili