Razor söz dizimini kullanarak ASP.NET Web programlamaya giriş (C#)

Tom FitzMacken tarafından

Bu makalede, Razor söz dizimi kullanarak ASP.NET Web sayfaları ile programlamaya genel bakış sunulmaktadır. ASP.NET, Microsoft 'un web sunucularında dinamik Web sayfaları çalıştırmaya yönelik teknolojisidir. Bu makaleler, C# programlama dilini kullanmaya odaklanır.

Şunları öğreneceksiniz:

  • Razor söz dizimi kullanarak programlama ASP.NET Web sayfaları ile çalışmaya başlama için en iyi 8 programlama ipuçları.
  • İhtiyaç duyacağınız temel programlama kavramları.
  • ASP.NET sunucu kodu ve Razor söz dizimi hepsi ile ilgilidir.

Yazılım sürümleri

  • ASP.NET Web sayfaları (Razor) 3

Bu öğretici, ASP.NET Web Pages 2 ile de kullanılabilir.

Ilk 8 programlama Ipuçları

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

Note

Razor söz dizimi, C# programlama dilini temel alır ve en sık kullanılan ASP.NET Web sayfaları olan dildir. Ancak Razor söz dizimi Ayrıca, Visual Basic dilini ve gördüğünüz her şeyi de Visual Basic de yapabilirsiniz. Ayrıntılar için bkz. ek Visual Basic dili ve sözdizimi.

Makalede daha sonra bu programlama tekniklerinin birçoğu hakkında daha fazla bilgi edinebilirsiniz.

1. @ karakterini kullanarak bir sayfaya kod eklersiniz

@ karakteri satır içi ifadeler, tek deyim blokları 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>

Bu deyimler, sayfa bir tarayıcıda çalıştırıldığında şöyle görünür:

Razor-Img1

Tip

HTML kodlaması

Önceki örneklerde olduğu gibi, @ karakterini kullanarak bir sayfada içerik görüntülediğinizde, ASP.NET HTML-, çıktıyı kodluyor. Bu, ayrılmış HTML karakterlerinin (< ve > ve &), karakterlerin HTML etiketleri veya varlıklar olarak yorumlanıp bir Web sayfasında karakter olarak görüntülenmesini sağlayan kodlarla değiştirilir. HTML kodlaması olmadan, sunucu kodunuzun çıktısı doğru görüntülenmeyebilir ve güvenlik risklerine karşı bir sayfa sunabilir.

Amacınız etiketleri biçimlendirme olarak işleyen (örneğin, bir paragraf için <p></p> ya da metin vurgulamak için <em></em>) HTML işaretlemesinin çıktısını alıyorsa, bu makalenin ilerleyen kısımlarında yer alan kod bloklarında metin, biçimlendirme ve kod birleştirme bölümüne bakın.

Formlarla çalışırkenHTML kodlaması hakkında daha fazla bilgi edinebilirsiniz.

2. kod bloklarını küme ayraçları içine almalısınız

Kod bloğu bir veya daha fazla kod deyimi içerir ve küme ayraçları içine alınmıştı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>

Bir tarayıcıda gösterilecek Sonuç:

Razor-Img2

3. bir blok içinde her bir kod ifadesini noktalı virgülle sonlandırın

Bir kod bloğu içinde, tüm kod deyimlerinin noktalı virgülle bitmesi gerekir. Satır içi ifadeler noktalı virgül ile 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

Değerleri dizeler, sayılar ve tarihler gibi bir değişkendesaklayabilirsiniz. var anahtar sözcüğünü kullanarak yeni bir değişken oluşturursunuz. @kullanarak doğrudan bir sayfada değişken değerleri 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>

Bir tarayıcıda gösterilecek Sonuç:

Razor-IMG3

5. sabit dize değerlerini çift tırnak işaretleri içine alın

Dize , metin olarak kabul edilen bir karakter dizisidir. Bir dize belirtmek için, bunu çift tırnak işareti içine alın:

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

Göstermek istediğiniz dize bir ters eğik çizgi karakteri (\) veya çift tırnak işareti (") içeriyorsa, @ işleci önekli bir tam dize sabit değeri kullanın. (İçinde C#, tam bir dize sabit değeri kullanmadığınız müddetçe, \ karakterinin özel anlamı vardır.)

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

Çift tırnak işaretleri eklemek için, tam bir dize değişmez değeri kullanın ve tırnak işaretlerini tekrarlayın:

<!-- 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

Note

@ karakterinin her ikisi de ' de C# tam dize sabit değerlerini işaretlemek için ve ASP.net sayfalarındaki kodu işaretlemek için kullanıldığına dikkat edin.

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

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

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

Bir değişkeni var lastName = "Smith"; olarak bildirir ve sayfanızdaki bu değişkene @LastNameolarak başvuru yapmayı denerseniz, "Smith"yerine "Jones" değeri alırsınız.

Note

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

7. kodlarınızın çoğu nesneleri içerir

Bir nesne , bir sayfa, metin kutusu, dosya — , görüntü, Web isteği, e-posta iletisi, müşteri kaydı (veritabanı satırı) vb. ile programlama yapamayacağınız şeyi temsil eder. Nesneler, özelliklerini betimleyen ve metin kutusu Text nesnesini okuyabilmeniz veya değiştirebilmeniz — için özelliklere sahiptir. bir istek nesnesi bir Url özelliğine sahiptir, bir e-posta iletisi bir From özelliğine sahiptir ve bir müşteri nesnesi bir FirstName özelliğine sahiptir. Nesneler, gerçekleştirebilecekleri" "fiiller olan yöntemlere de sahiptir. Bir dosya nesnesinin Save yöntemi, bir görüntü nesnesinin Rotate yöntemi ve bir e-posta nesnesinin Send yöntemi sayılabilir.

Genellikle sayfada metin kutularının (form alanları) değerleri, istek ne tür bir tarayıcı, isteğin URL 'SI, Kullanıcı kimliği vb. gibi bilgiler sunan Request nesnesiyle çalışırsınız. Aşağıdaki örnek, Request nesnesinin özelliklerine nasıl erişileceğinin yanı sıra sunucudaki sayfanın mutlak yolunu sağlayan Request nesnesinin MapPath yönteminin nasıl çağrılacağını gösterir:

<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>

Bir tarayıcıda gösterilecek Sonuç:

Razor-Img5

8. kararları veren kodu yazabilirsiniz

Dinamik Web sayfalarının temel bir özelliği, koşullara göre ne yapılacağını belirleyebileceğinize bağlıdır. Bunu yapmanın en yaygın yolu if deyimidir (ve isteğe bağlı else deyimidir).

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

if(IsPost) ifade, if(IsPost == true)yazmanın bir Özet yoludur. if deyimleriyle birlikte, bu makalenin ilerleyen kısımlarında açıklanan koşulları test etme, kod blokları yineleme ve benzeri birçok yol vardır.

Sonuç tarayıcıda ( Gönder'e tıklandıktan sonra) gösterilir:

Razor-Img6

Tip

HTTP GET ve POST yöntemleri ve ıspost özelliği

Web sayfaları (HTTP) için kullanılan protokol, sunucuya istek yapmak için kullanılan çok sayıda yöntemi (fiil) destekler. En yaygın iki tane, bir sayfayı okumak için kullanılan ve bir sayfayı göndermek için kullanılan POST ' dır. Genellikle, Kullanıcı ilk kez bir sayfa istediğinde, sayfa GET kullanılarak istenir. Kullanıcı bir formu doldurduğunda ve sonra bir Gönder düğmesine tıkladığında, tarayıcı sunucuya bir POST isteği oluşturur.

Web programlamada, sayfayı nasıl işleyeceğini bilmeniz için bir sayfanın GET veya POST olarak istenmekte olduğunu bilmeniz genellikle yararlı olur. ASP.NET Web sayfalarında, bir isteğin bir GET veya POST olup olmadığını görmek için IsPost özelliğini kullanabilirsiniz. İstek bir GÖNDERIME ise, IsPost özelliği true döndürür ve bir formdaki metin kutularının değerlerini okumak gibi şeyler yapabilirsiniz. Birçok örnek, IsPostdeğerine bağlı olarak sayfayı farklı şekilde nasıl işleyeceğini gösterir.

Basit bir kod örneği

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

  1. Düzenleyicinizde yeni bir dosya oluşturun ve AddNumbers. cshtmlolarak adlandırın.

  2. Sayfada bulunan herhangi bir ş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>
    

    Dikkat etmeniz gereken bazı şeyler aşağıda verilmiştir:

    • @ karakteri sayfadaki ilk kod bloğunu başlatır ve sayfanın alt kısmına yakın olan totalMessage değişkeninden önce gelir.
    • Sayfanın üst kısmındaki blok küme ayraçları içine alınır.
    • Üstteki blokta, tüm satırlar noktalı virgül ile biter.
    • Değişkenler total, num1, num2ve totalMessage çeşitli sayıları ve bir dizeyi depolar.
    • totalMessage değişkenine atanan sabit dize değeri çift tırnak işaretleri içinde.
    • Kod büyük/küçük harfe duyarlı olduğundan, totalMessage değişkeni sayfanın alt kısmında kullanıldığında, adının en üstteki değişkenle eşleşmesi gerekir.
    • İfade num1.AsInt() + num2.AsInt(), nesneler ve yöntemlerle çalışmayı gösterir. Her bir değişkendeki AsInt yöntemi, bir kullanıcı tarafından girilen dizeyi bir sayıya (bir tamsayı) dönüştürür, böylece bunun üzerinde aritmetik yapabilirsiniz.
    • <form> etiketi bir method="post" özniteliği 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 doğru olarak değerlendirilir ve koşullu kod çalışır ve sayı ekleme sonucunu görüntüler.
  3. Sayfayı kaydedin ve bir tarayıcıda çalıştırın. (Çalıştırmadan önce sayfanın dosyalar çalışma alanında seçili olduğundan emin olun.) İki tam sayı girin ve Ekle düğmesine tıklayın.

    Razor-Img7

Temel programlama kavramları

Bu makalede, ASP.NET Web programlamaya genel bakış sunulmaktadır. Geniş bir inceleme değildir, yalnızca en sık kullanacağınız programlama kavramlarıyla hızlı bir tura katılın. Bu nedenle, ASP.NET Web sayfaları ile çalışmaya başlamak için ihtiyacınız olan neredeyse her şeyi de ele alır.

Ancak ilk olarak biraz teknik bir arka plan.

Razor sözdizimi, sunucu kodu ve ASP.NET

Razor söz dizimi, bir Web sayfasına sunucu tabanlı kod eklemeye yönelik basit bir programlama sözdizimidir. Razor söz dizimi 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 kullandığınız malzemedir: HTML biçimlendirme (öğeler), CSS gibi stil bilgileri, JavaScript gibi bazı istemci betikleri, belki de düz metin.

Razor söz dizimi, bu istemci içeriğine sunucu kodu eklemenize olanak tanır. Sayfada sunucu kodu varsa, sunucu tarayıcıya göndermeden önce bu kodu çalıştırır. Sunucu üzerinde çalışan kod, sunucu tabanlı veritabanlarına erişim gibi tek başına istemci içeriğini kullanarak çok daha karmaşık olabilecek görevler gerçekleştirebilir. En önemlisi, sunucu kodu istemci içeriğini — dinamik olarak oluşturabilir ve bu Işlem anında HTML biçimlendirme veya diğer içerik oluşturabilir ve ardından sayfanın içerebileceği herhangi BIR statik HTML ile birlikte tarayıcıya gönderebilir. Tarayıcınızın perspektifinden, sunucu kodunuz tarafından oluşturulan istemci içerikleri diğer istemci içeriğinden farklı değildir. Zaten gördüğünüz gibi, gereken sunucu kodu oldukça basittir.

Razor söz dizimi 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şaretlenen kodu çalıştırır ve sonra sayfayı tarayıcıya gönderir.

ASP.NET nereye sığacak?

Razor söz dizimi, Microsoft 'un Microsoft .NET Framework 'ü temel alan ASP.NET adlı bir teknolojiyi temel alır. The.NET Framework, Microsoft 'un neredeyse her türlü bilgisayar uygulamasının geliştirilmesi için büyük ve kapsamlı bir programlama çerçevesidir. ASP.NET, Web uygulamaları oluşturmak için özel olarak tasarlanan .NET Framework bölümüdür. Geliştiriciler dünyadaki en büyük ve en yüksek trafikli web sitelerinin çoğunu oluşturmak için ASP.NET kullandık. (Dosya adı uzantısı . aspx ' i BIR sitedeki URL 'nin bir parçası olarak gördüğünüz zaman, sitenin ASP.NET kullanılarak yazıldığını bilirsiniz.)

Razor söz dizimi, size ASP.NET 'un tüm gücünü sunar, ancak acemi bir uzman olduğunu öğrenmenizi ve uzman olduğunuzda daha üretken olmanızı sağlayan basitleştirilmiş bir sözdizimi kullanmanızı sağlar. Bu söz dizimi kullanımı basit olsa da, ASP.NET .NET Framework ile aile ilişkisi, Web siteleriniz daha karmaşık hale geldiği için, daha geniş çerçevelerin gücünden yararlanabilirsiniz.

Razor-Img8

Tip

Sınıflar ve örnekler

ASP.NET sunucu kodu, sınıflarının fikir fikrini üzerine inşa edilen nesneleri kullanır. Sınıfı, bir nesnenin tanımı veya şablonudur. Örneğin, bir uygulama herhangi bir müşteri nesnesinin ihtiyacı olan ö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 nesnesi (veya örnekleyen) örneği oluşturur. Bireysel her müşteri, Customer sınıfının ayrı bir örneğidir. Her örnek aynı özellikleri ve yöntemleri destekler, ancak her bir müşteri nesnesi benzersiz olduğundan her örnek için özellik değerleri genellikle farklıdır. Bir müşteri nesnesinde, LastName özelliği "Smith" olabilir; başka bir müşteri nesnesinde, LastName özelliği "Jones" olabilir.

Benzer şekilde, sitenizdeki her bir Web sayfası, Page sınıfının bir örneği olan Page nesnesidir. Sayfadaki bir düğme, Button sınıfının bir örneği olan Button nesnesidir ve bu şekilde devam eder. Her örnek kendi özelliklerine sahiptir, ancak bunların hepsi nesnenin sınıf tanımında belirtilere göre belirlenir.

Temel söz dizimi

Daha önce, bir ASP.NET Web sayfaları sayfası oluşturma ve HTML biçimlendirmesine sunucu kodu ekleme hakkında temel bir örnek gördünüz. Burada, programlama dili kuralları olan Razor söz dizimi — kullanarak ASP.NET sunucu kodu yazmanın temellerini öğreneceksiniz.

Programlamayla karşılaşırsanız (özellikle C, C++, C#, Visual Basic veya JavaScript kullandıysanız), burada okuduğunuzdan büyük bir şey tanıdık gelecektir. Muhtemelen yalnızca sunucu kodunun . cshtml dosyalarındaki biçimlendirmeye nasıl eklendiği hakkında bilgi almanız gerekir.

Kod bloklarında metin, biçimlendirme ve kod birleştirme

Sunucu kod blokları ' nda, genellikle sayfada metin veya biçimlendirme (veya her ikisi de) çıktısını almak istersiniz. Bir sunucu kod bloğu kod olmayan ve bunun yerine olarak işlenmesi gereken metin içeriyorsa, ASP.NET bu metni koddan ayırabilmelidir. Bunu yapmak için birkaç yol vardır.

  • Metni <p></p> veya <em></em>gibi bir HTML öğesine koyun:

    @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 ifadelerini içerebilir. ASP.NET, açılan HTML etiketini (örneğin, <p>) gördüğünde, öğe ve içeriği gibi her şeyi tarayıcıya 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ı çıktısı verir; <text> öğesi çıktı için birden çok satır barındırır. Bu seçenekler, çıktının bir parçası olarak bir HTML öğesi işlemek istemediğinizde yararlı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.
    }
    

    Metnin birden çok satırını veya eşleşmeyen HTML etiketlerini çıkarmak istiyorsanız, her satırın önüne @:veya satırı bir <text> öğesine ekleyebilirsiniz. @: işleci gibi<text> Etiketler, metin içeriğini belirlemek için ASP.NET tarafından kullanılır ve sayfa çıktısında hiçbir şekilde 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şlenecek metni kapsamak için tek bir çift <text> etiketi kullanır. İkinci örnekte, <text> ve </text> etiketleri üç satırı kapsar; bunların hepsi, sunucu kodu ve eşleşen HTML etiketleriyle birlikte, bazı metin ve eşleşmeyen HTML etiketlerine (<br />) sahiptir. Ayrıca, @: işleçle her bir satırdan de tek başına bir kez daha olabilirsiniz; Her iki yöntem de geçerlidir.

    Note

    Bu bölümde — gösterildiği gibi metin yazdığınızda, bir HTML öğesi, @: işleci veya <text> öğesi — ASP.net, çıktıyı HTML olarak kodlamaz. (Daha önce belirtildiği gibi, ASP.NET, bu bölümde belirtilen özel durumlar dışında, daha önce @sunucu kod ifadelerinin ve sunucu kodu bloklarının çıkışını kodladır.)

Boşlu

Deyimdeki (ve dize sabit değerinin dışında) fazladan boşluklar, bu ifadeyi etkilemez:

@{ var lastName =    "Smith"; }

Deyimdeki bir satır sonu deyim üzerinde hiçbir etkiye sahip değildir ve daha okunaklı olması için deyimleri kaydırabilirsiniz. Aşağıdaki deyimler aynıdır:

@{ var theName =
"Smith"; }

@{
    var
    personName
    =
    "Smith"
    ;
}

Ancak, bir satırı dize sabit değerinin ortasında kaydıramazsı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ırılan uzun bir dizeyi birleştirmek için iki seçenek vardır. Bu makalede daha sonra göreceğiniz birleştirme işlecini (+) kullanabilirsiniz. Bu makalede daha önce gördüğünüz gibi, tam bir dize sabiti oluşturmak için @ karakterini de kullanabilirsiniz. Satırlar arasında tam dize sabit değerlerini kesebilirsiniz:

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

Kod (ve biçimlendirme) açıklamaları

Açıklamalar sizin veya diğerleri için Not bırakmayı sağlar. Ayrıca, çalıştırmak istemediğiniz bir kod veya biçimlendirme bölümünü (Açıklamaolarak) devre dışı bırakabilmeniz, ancak sayfada çalışmaya devam etmek isteyeceksiniz.

Razor kodu ve HTML işaretlemesi için farklı yorum sözdizimi vardır. Tüm razor kodlarında olduğu gibi, sayfa tarayıcıya gönderilmeden önce, Razor açıklamaları sunucu üzerinde işlenir (ve sonra kaldırılır). Bu nedenle, Razor açıklama sözdizimi, dosyayı düzenlerken görebileceğiniz, ancak sayfa kaynağında bile Kullanıcı görmemiş olan koda (veya biçimlendirme içine) yorum koymanıza imkan tanır.

ASP.NET Razor açıklamaları için, yorumu @* ile başlatır ve *@ile sonlandırın. Yorum bir 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çindeki bir açıklama aşağıda verilmiştir:

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

Bu kod, kod satırı açıklama satırı ile birlikte, aşağıdaki çalıştırılmayacak şekilde kod bloğu aşağıda verilmiştir:

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

Bir kod bloğu içinde, Razor açıklama sözdizimi kullanmanın alternatifi olarak, kullanmakta olduğunuz programlama dilinin yorum söz dizimini kullanabilirsiniz, örneğin C#:

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

' C#De, tek satırlık açıklamaların önünde // karakterleri ve çok satırlı açıklamalar /* ile başlayıp */ile biter. (Razor yorumlarında olduğu gibi C# , açıklamalar tarayıcıda işlenmez.)

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

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

HTML açıklamaları <!-- karakterle başlar ve -->biter. HTML açıklamalarını yalnızca metin değil, aynı zamanda sayfada tutmak isteyebileceğiniz ancak işlemek istemediğiniz HTML işaretlemesini kullanabilirsiniz. Bu HTML yorumu, etiketlerin ve içerdikleri metnin tüm içeriğini gizler:

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

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

Razor 'in C#iç içe bloklar üzerinde sınırlamalar vardır. Daha fazla bilgi için bkz. C# adlandırılmış değişkenler ve Iç Içe bloklar bozuk kod oluşturur

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ırın, ancak ad alfabetik bir karakterle başlamalı ve boşluk ya da 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şkenleriniz ("Hello World"), tam sayı değerlerini depolayan tamsayı değişkenleri (3 veya 79 gibi) ve tarih değerlerini çeşitli biçimlerde depolayan Tarih değişkenlerini (4/12/2012 veya Mart 2009 gibi) kullanabilirsiniz. Ve kullanabileceğiniz pek çok farklı veri türü vardır.

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

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

@{
    // 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 bir tarayıcıda görüntülenmiş olarak 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 belirleyebilse de bazen olamaz. Bu nedenle, açık bir dönüştürme gerçekleştirerek ASP.NET Out 'a yardımcı olmanız gerekebilir. Türleri dönüştürmeniz gerekmese de, ne zaman çalıştığınız veri türlerini görmek için test etmeniz yararlı olur.

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

@{
    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 dizeler olarak gelir. Kullanıcılardan bir sayı girmeleri ve bir rakam girseler bile, Kullanıcı girişi gönderildiğinde ve kodu kodda okuduğunuzda, veriler dize biçimindedir. Bu nedenle, dizeyi bir sayıya dönüştürmeniz gerekir. Örnekte, değerleri dönüşümlemeden aritmetik gerçekleştirmeye çalışırsanız, ASP.NET iki dize ekleyemediğinden aşağıdaki hata oluşur:

' 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 AsInt yöntemini çağırın. Dönüştürme başarılı olursa, sayıları ekleyebilirsiniz.

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

Yöntem

Açıklama

Örnek


AsInt(), IsInt()

Tam sayı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 Boolean bir türe 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ı bir 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 bir değere sahip bir dizeyi ondalık bir sayıya dönüştürür. (ASP.NET ' de, ondalık sayı bir kayan noktalı sayıdan daha belirgin olur.)

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

AsDateTime(), IsDateTime()

Bir 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 bir 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

İşleci, bir ifadede ne tür komutun gerçekleştirileceğini ASP.NET söyleyen bir anahtar sözcüktür veya karakterdir. C# Dil (ve buna dayalı Razor söz dizimi) birçok işleci destekler, ancak kullanmaya başlamak için yalnızca birkaç tane tanımak yeterlidir. Aşağıdaki tabloda en yaygın operatörler özetlenmektedir.

İşlecinde

Açıklama

Örnekler


+ - * /

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

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

=

Atama. Bir deyimin sağ tarafındaki değeri, sol taraftaki nesneye atar.

var age = 17;

==

Eþit. Değerler eşitse true döndürür. (= işleci ve == işleci arasındaki ayrımı fark ettiğini unutmayın.)

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

!=

Olmama. Değerler eşit değilse true döndürür.

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

< > <= >=

Küçüktür, büyüktür, küçüktür, küçüktür ve eşittir, 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 bu işleç ile toplama işleci arasındaki farkı, ifadenin veri türüne göre bilir.

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

+= -=

Bir değişkenden 1 (sırasıyla) ekleyen ve çıkartacak 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();

()

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

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

[]

Köşeli. Dizilerde veya koleksiyonlardaki değerlere erişmek için kullanılır.

var income = Request["AnnualIncome"];

!

Başlatılmadı. true bir değeri false tersine çevirir ve tam tersi de geçerlidir. Genellikle false test etmek için (truedeğil) kısayol yöntemi olarak kullanılır.

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

&& ||

Koşulları birbirine bağlamak için kullanılan mantıksal AND ve OR.

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

Kodda dosya ve klasör yollarıyla çalışma

Genellikle kodunuzda dosya ve klasör yolları ile çalışırsınız. Geliştirme bilgisayarınızda görünebilen bir Web sitesi için fiziksel klasör yapısına bir örnek aşağıda verilmiştir:

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

URL 'Ler ve yollarla ilgili bazı temel ayrıntılar aşağıda verilmiştir:

  • URL, bir etki alanı adı (http://www.example.com) veya sunucu adı (http://localhost, http://mycomputer) ile başlar.
  • Bir URL, ana bilgisayardaki fiziksel bir yola karşılık gelir. Örneğin, http://myserver sunucuda C:\websites\mywebsite klasörüne karşılık gelebilir.
  • Sanal yol, tüm yolu belirtmek zorunda kalmadan koddaki yolları temsil etmek için toplu bir yoldur. Bu, etki alanı veya sunucu adını izleyen bir URL 'nin 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ştir:

URL 'YI doldurun http://mycompanyserver/humanresources/CompanyPolicy.htm
Sunucu adı mycompanyserver
Sanal yol /humanresources/CompanyPolicy.htm
Fiziksel yol C:\websites\humanresources\companypolicy.htm

Sanal kök, C: sürücünüzün kökünde olduğu gibi/olur. (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; Bu bir diğer ad olabilir. (Üretim sunucularında, sanal yol nadiren tam bir fiziksel yolla eşleşir.)

Kodda dosya ve klasörlerle çalışırken, çalıştığınız nesnelere bağlı olarak, bazen fiziksel yola ve bazen bir sanal yola başvurmanız gerekir. ASP.NET, kodda dosya ve klasör yollarıyla çalışmak için size bu 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.exegibi) mutlak bir fiziksel yola ( C:\websites\mywebsitefolder\default.exegibi) dönüştürür. Bu yöntemi, tüm fiziksel yola ihtiyacınız olduğunda kullanırsınız. Tipik bir örnek, Web sunucusunda bir metin dosyası veya resim dosyası okurken veya yazarken bir örnektir.

Genellikle sitenizin bir barındırma sitesinin sunucusunda mutlak fiziksel yolunu bilemezsiniz; bu nedenle, bu yöntem, bildiğiniz yolu (sanal yol) sizin için sunucuda karşılık gelen yola dönüştürebilir. Bir dosya veya klasörün sanal yolunu yöntemine 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şvuruluyor: ~ operator ve href yöntemi

Bir . cshtml veya . vbhtml dosyasında, ~ işlecini kullanarak sanal kök yoluna başvurabilirsiniz. Sayfaları bir sitede bir konuma taşıyabilmeniz ve içerdikleri bağlantıların diğer sayfalara bölünememesi nedeniyle bu çok yararlı olur. Web sitenizi farklı bir konuma taşımanız durumunda da yararlıdır. İşte bazı örnekler:

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

Web sitesi http://myserver/myapp, sayfa çalışırken ASP.NET bu yolları nasıl değerlendilecektir:

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

(Bu yolları gerçekten değişkenin değerleri olarak görmezsiniz, ancak ASP.NET, bu gibi yollar gibi davranır.)

~ işlecini hem sunucu kodunda (yukarıdaki gibi) hem de biçimlendirme ' de şu şekilde kullanabilirsiniz:

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

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

Biçimlendirme ' de, görüntü dosyaları, diğer Web sayfaları ve CSS dosyaları gibi kaynaklara yollar oluşturmak için ~ işlecini kullanırsınız. Sayfa çalıştığında, ASP.NET sayfayı (hem kod hem de biçimlendirme) arar ve tüm ~ başvurularını 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 sayıda kez tekrardan (bir döngü çalıştıran kod) tekrarlamanızı sağlar.

Test koşulları

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

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

if anahtar sözcüğü bir blok başlatır. Gerçek test (koşul) parantez içinde ve true veya false değerini döndürür. Test true olursa çalıştırılan deyimler küme ayraçları içine alınmıştır. if deyimi, koşul yanlış ise çalıştırılacak deyimleri belirten bir else bloğu içerebilir:

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

else if bloğunu kullanarak 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şulu denetlenir. Bu koşul karşılanıyorsa, else if bloğundaki deyimler yürütülür. Koşulların hiçbiri karşılanmazsa, else bloğundaki deyimler yürütülür. Herhangi bir sayıda başka If bloğu ekleyebilirsiniz ve ardından "başka" koşulu olan her şeyi else bir blok ile kapatabilirsiniz.

Çok sayıda koşulu test etmek için switch bloğunu 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çinde (örnekte, weekday değişken). Her bir test, iki nokta üst üste (:) ile biten case bir ifade kullanır. Bir case deyimin değeri test değeriyle eşleşiyorsa, bu durum bloğundaki kod yürütülür. Her Case ifadesini bir break ifadesiyle kapatırsınız. (Her bir case bloğuna kesme eklemeyi unutursanız, sonraki case deyimindeki kod de çalıştırılır.) switch bloğu, diğer durumların hiçbiri doğru değilse, başka bir "her şey" seçeneğinin son durumu olarak bir default bildirimine sahiptir.

Bir tarayıcıda görünen son iki koşullu blok sonucu:

Razor-Img10

Döngü kodu

Genellikle aynı deyimleri tekrar tekrar çalıştırmanız gerekir. Bu, döngüye göre yapılır. Örneğin, çoğu kez bir veri koleksiyonundaki her öğe için aynı deyimleri çalıştırırsınız. Kaç kez döngüye almak istediğinizi biliyorsanız for döngüsünü kullanabilirsiniz. Bu tür bir döngü, özellikle daha fazla sayım veya sayım için yararlıdır:

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

Döngü for anahtar sözcüğüyle başlar, sonra parantez içinde üç deyim gelir, her biri noktalı virgül ile sonlandırılır.

  • Parantez içinde, ilk ifade (var i=10;) bir sayaç oluşturur ve 10 ' a başlatır. Herhangi bir değişkeni kullanabileceğiniz i — sayaç adını yazmanız gerekmez. for döngüsü çalıştığında, sayaç otomatik olarak artırılır.
  • İkinci ifade (i < 21;), ne kadar saymak istediğinize ilişkin koşulu ayarlar. Bu durumda, en fazla 20 ' ye gitmesini istersiniz (yani sayaç 21 ' den az olduğunda devam edin).
  • Üçüncü ifade (i++) bir artırma işleci kullanır, bu da her döngü her çalıştığında sayacın kendisine 1 ekleneceğini belirtir.

Küme ayraçları içinde döngünün her yinelemesi için çalıştırılacak koddur. Biçimlendirme, her seferinde yeni bir paragraf (<p> öğesi) oluşturur ve i değerini (sayaç) görüntüleyerek çıktıya bir satır ekler. Bu sayfayı çalıştırdığınızda örnek, her satırda öğe numarasını gösteren metinle birlikte çıktıyı görüntüleyen 11 satır oluşturur.

Razor-Img11

Bir koleksiyon veya dizi ile çalışıyorsanız, genellikle bir foreach döngüsü kullanırsınız. Bir koleksiyon benzer nesneler grubudur ve foreach döngüsü koleksiyondaki her öğe üzerinde bir görevi gerçekleştirmenizi sağlar. Bu tür bir döngü koleksiyonlar için uygundur, çünkü for döngüsünün aksine sayacı artırmanız veya bir sınır ayarlamanız gerekmez. Bunun yerine, foreach döngü kodu yalnızca, tamamlanana kadar koleksiyon üzerinden ilerler.

Örneğin, aşağıdaki kod, Web sunucunuz hakkında bilgi içeren bir nesnesi olan Request.ServerVariables koleksiyonundaki öğeleri döndürür. HTML madde işaretli listesinde yeni bir <li> öğesi oluşturarak her öğenin adını göstermek için foreac h döngüsünü kullanır.

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

foreach anahtar kelimesinin ardından, koleksiyondaki tek bir öğeyi temsil eden (örnekte, var item), ardından in anahtar sözcüğünü ve ardından, sonra da kullanmak istediğiniz koleksiyonu içeren bir değişken bildirdiğiniz parantezler gelir. foreach döngüsünün gövdesinde, 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 while ifadesini kullanın:

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

Bir while döngüsü, while anahtar sözcüğüyle başlar ve sonra parantez, döngünün ne kadar süreyle devam ettiğini (countNum 50 ' den az olduğu sürece), sonra da yinelemeyi yineleme olarak belirler. Döngüler genellikle sayma için kullanılan bir değişken veya nesneden artış (ekleme) veya azaltma (çıkarma). Örnekte, += işleci döngünün her çalıştığında countNum 1 ' i ekler. (Döngüsel bir döngüsünde bir değişkeni azaltmak için, azaltma işleci -=) kullanın.

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ça çalışacağımız bazı önemli nesneler açıklanmaktadır.

Sayfa nesneleri

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

@{
    var path = Request.FilePath;
}

Geçerli sayfa nesnesindeki özelliklere ve yöntemlere başvurduğunuzdan emin olmak için, kodunuzda sayfa nesnesini göstermek üzere this anahtar sözcüğünü kullanabilirsiniz. Aşağıda, sayfayı göstermek için this eklenen önceki kod örneği verilmiştir:

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

Page nesnenin özelliklerini kullanarak çok fazla bilgi alabilirsiniz:

  • Request. Zaten gördüğünüze göre, bu, istek ne tür bir tarayıcı, sayfanın URL 'SI, Kullanıcı kimliği vb. gibi geçerli istek hakkındaki bilgilerin bir koleksiyonudur.

  • Response. Bu, sunucu kodunun çalışmayı tamamladığında tarayıcıya gönderilecek yanıt (sayfa) hakkındaki bilgilerin bir 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)

Bir koleksiyon , bir veritabanından Customer nesneleri koleksiyonu gibi aynı türde bir nesne grubudur. ASP.NET, Request.Files koleksiyonu gibi birçok yerleşik koleksiyon içerir.

Genellikle koleksiyonlardaki verilerle çalışırsınız. İki ortak koleksiyon türü dizi ve sözlüktür. Bir dizi benzer öğeler koleksiyonunu depolamak istediğinizde ancak her bir öğeyi tutacak 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>
    }
}

Diziler ile, string, intveya DateTimegibi belirli bir veri türünü bildirirsiniz. Değişkenin bir dizi içerebileceğini göstermek için bildirime köşeli ayraç eklersiniz (string[] veya int[]gibi). Bir dizideki öğelere konumlarını (Dizin) veya foreach ifadesini kullanarak erişebilirsiniz. Dizi dizinleri sıfır tabanlıdır — , ilk öğe 0 ' dır, ikinci öğe ise 1 konumunda 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 öğelerin sayısını Length özelliğini alarak belirleyebilirsiniz. Dizideki belirli bir öğenin konumunu almak için (diziyi aramak için) Array.IndexOf yöntemini kullanın. Ayrıca, bir dizinin içeriğini ters çevirme (Array.Reverse yöntemi) veya içeriği sıralama (Array.Sort yöntemi) gibi işlemleri de yapabilirsiniz.

Bir tarayıcıda görünen dize dizisi kodunun çıkışı:

Razor-Img13

Sözlük, anahtar/değer çiftleri koleksiyonudur ve buna karşılık gelen değeri ayarlamak ya da almak için anahtarı (veya adı) sağlarsınız:

@{
    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, new anahtar sözcüğünü kullanarak yeni bir sözlük nesnesi kullandığınızı belirtebilirsiniz. var anahtar sözcüğünü kullanarak bir değişkene bir sözlük atayabilirsiniz. Sözlükteki öğelerin veri türlerini köşeli ayraç (< >) kullanarak gösterebilirsiniz. Bildirimin sonunda, bu gerçekte yeni bir sözlük oluşturan bir yöntem olduğundan, parantez çifti eklemeniz gerekir.

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

myScores["test4"] = 79;

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

var testScoreThree = myScores["test3"];

Yöntemler parametrelerle çağırma

Bu makalede daha önce okuduğunuzdan, ile programlarındaki nesneler yöntemlere sahip olabilir. Örneğin, bir Database nesnesi bir Database.Connect yöntemine sahip olabilir. Birçok yöntemde de bir veya daha fazla parametre vardır. Parametresi , bir yöntemine geçirdiğiniz bir değerdir ve bu yöntem, görevini tamamlamaya yönelik yöntemi etkinleştirir. Örneğin, üç parametre alan Request.MapPath yöntemi için bir bildirime bakın:

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

(Satır daha okunabilir hale getirmek için sarmalanmış. Satır sonlarını, tırnak işaretleri içine alınan dizeler hariç neredeyse her bir yere koyabildiğiniz unutulmamalıdır.)

Bu yöntem, belirtilen sanal yola karşılık gelen sunucudaki fiziksel yolu döndürür. Yöntemi için üç parametre virtualPath, baseVirtualDirve allowCrossAppMapping. (Bildiriminde, parametrelerin kabul edeceği 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 kullanabileceğiniz 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ıraya geçirin. (Bu sırayı genellikle yöntemi için belgeleri okuyarak bilirsiniz.) Sırayı izlemeniz gerekir ve gerekirse parametrelerden — hiçbirini atlayamazsınız, bir değeri olmayan bir Konumsal parametre için boş bir dize ("") veya null geçirin.

Aşağıdaki örnek, Web sitenizde betikler adında bir klasörünüz olduğunu varsayar. Kod Request.MapPath yöntemini çağırır ve üç parametrenin değerlerini doğru sırada geçirir. Ardından, sonuçta elde edilen eşleştirilmiş 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 çok sayıda parametresi olduğunda, adlandırılmış parametreleri kullanarak kodunuzun daha okunabilir olmasını sağlayabilirsiniz. Adlandırılmış parametreleri kullanarak bir yöntemi çağırmak için parametre adının ardından iki nokta üst üste (:) ve ardından değeri belirtirsiniz. Adlandırılmış parametrelerin avantajı, bunları istediğiniz sırada geçirebilmeniz. (Bir dezavantajı yöntem çağrısının sıkışık olmaması.)

Aşağıdaki örnek, yukarıdaki gibi aynı yöntemi çağırır, ancak değerleri sağlamak için adlandırılmış parametreleri kullanır:

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

Görebileceğiniz gibi, parametreler farklı bir sırayla geçirilir. Ancak, önceki örneği çalıştırırsanız ve bu örnekte, aynı değer döndürülür.

Hataları İşleme

Try-catch deyimleri

Kodunuzda, denetiminizin dışındaki nedenlerle başarısız olabilecek deyimler vardır. Örneğin:

  • Kodunuz bir dosya oluşturmayı veya bir dosyayı erişmeyi denediğinde, tüm hata sıralamaları meydana gelebilir. İstediğiniz dosya mevcut olmayabilir, kilitli olabilir, kod izinlere sahip olmayabilir ve bu şekilde devam eder.
  • Benzer şekilde, kodunuz bir veritabanındaki kayıtları güncelleştirmeye çalışırsa, izin sorunları olabilir, veritabanı bağlantısı bırakılmış olabilir, kaydedilecek veriler geçersiz olabilir ve bu şekilde devam eder.

Programlama koşullarında, bu durumlara özel durumlardenir. Kodunuz bir özel durumla karşılaşırsa, en iyi şekilde kullanıcılara sinir bozucu bir hata iletisi üretir (atar):

Razor-Img14

Kodunuzun özel durumlarla karşılaşmasına ve bu türden hata iletilerinden kaçınmak için try/catch deyimlerini kullanabilirsiniz. try bildiriminde, kontrol ettiğiniz kodu çalıştırırsınız. Bir veya daha fazla catch deyiminde, oluşmuş olabilecek belirli hatalara (özel durum türleri) bakabilirsiniz. Benimsemeyi bekleme olduğunuz hatalara bakmak için gereken sayıda catch deyimi ekleyebilirsiniz.

Note

try/catch deyimlerde Response.Redirect yöntemini kullanmaktan kaçınmanızı öneririz, çünkü sayfanızda bir özel duruma neden olabilir.

Aşağıdaki örnek, ilk istekte bir metin dosyası oluşturan ve sonra kullanıcının dosyayı açmasına olanak tanıyan bir düğme görüntüleyen bir sayfa gösterir. Örnek, bir özel duruma neden olacak şekilde hatalı bir dosya adı kullanır. Kod, olası iki özel durum için catch deyimlerini içerir: dosya adı bozuksa oluşan FileNotFoundExceptionve ASP.NET bile klasörü bulamazsa oluşan DirectoryNotFoundException. (Her şey düzgün şekilde çalıştığında nasıl çalıştığını görmek için örnekteki bir deyimin açıklamasını değiştirebilirsiniz.)

Kodunuz özel durumu işlemediyse, önceki ekran görüntüsündeki gibi bir hata sayfası görürsünüz. Ancak, try/catch bölümü kullanıcının bu hata türlerini 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 dil ve sözdizimi

Başvuru Belgeleri

ASP.NET

C#Dildir