Razor Pages Başlangıç

Razor Page, sayfa odaklı senaryolarda kodlama yaparken controller ve view kullanmaktan daha kolay hale getirebilir.
 
Projeyi oluşturma aşamaları. Ben Visual Studio 2019 Community Edition u tercih ettim. Yeni proje oluştururken aşağıdaki adımları takip ederek yeni Razor Pages uygulamanızı oluşturabilirsiniz.
 
 
 
 
 
 
 
Burada belirmekte fayda var, projenin adını RazorPagesBook verdiğim için scaffolding işlemlerde bu isim pattern iyle otomatik olarak sınıflar ü
Proje Dosya Düzeni
 
Pages Folder
Oluşturduğumuz projenin dizinine baktığımızda, Pages klasöründe Razor sayfalarını göreceğiz. Her Razor sayfası çift dosyaya sahiptir.
 
 .cshtml Razor syntax ı kullanılarak yazılan C# kodunu içeren HTML i barındırır.
 .cshtml.cs sayfanın eventlerini yöneten C# kodlarını bulundurur.
 
wwwroot
 
HTML,JavaScript ve CSS gibi statik dosyaları ihtiva eder.
 
appSettings.json
 
Connection string gibi konfigurasyon verilerini içerir.
 
Program.cs
 
Uygulamanın başlangıç noktasını içerir.
 
Startup.cs
 
Uygulamanın nasıl davranacağını belirten kodları içerir.
 
Model Ekleme
 
Projemize sağ tıklayıp Add->New Folder seçeneğinden Models isminde yeni klasör oluşturalım. Oluşturduğumuz Models klasörüne sağ tıklayıp Add->New Class seçeneklerinden
Book olarak isimlendirelim.
 
 public class Book
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
        [DataType(DataType.DateTime)]
        public DateTime PublishDate { get; set; }
    }
 
 
Scaffold Book Model
 
Parantez içerisinde belirtmek gerekirse Scaffold bir terim. İngilizceden Türkçeye çevirdiğinizde iskele,yapı iskelesi,iskele kurmak gibi anlamları çıkıyor.
Scaffolding aracı Book modelimiz için CRUD işlemleri için gerekli sayfaları oluşturmaya yarıyor.
 
Pages klasörüne sağ tıklayıp, Add->New Folder ile Books adında bir klasör oluşturalım.
Daha sonrasında , Books klasörüne sağ tıklayıp, Add->New Scaffolded Item seçeneğinden karşımıza çıkan pencereden Razor Pages using Entity Framework(CRUD) App seçeneğinden ilerleyelim. Seçenekten sonra karşımıza çıkan dialog penceresinden aşağıdaki resimdeki mevcut işlemleri tamamlayalım.
 
Bu işlemlerden sonra Pages/Books klasöründe Create,Delete,Edit,Details,Index sayfaları oluşacaktır.
Data klasöründe ise RazorPagesBookContext.cs sınıfımız oluşmuş olacaktır.
appsettings.json dosyasına local database inize bağlantı sağlamak için connection string ifadeniz otomatik olarak eklenmiş olacaktır.
 
Initial Migration
 
Databasenizin başlangıç durumu için aşağıdaki komutları tek tek çalıştırmanız gerekiyor. Bunun için Tools->NuGet Package Manager->Package Manager Console seçimiyle tek tek aşağıdaki komutları çalıştırmanız gerekiyor.
 
Add-Migration InitialCreate
Update-Database
 
Create,Delete,Details ve Edit Sayfaları
namespace RazorPagesBook.Pages.Books
{
    public class IndexModel : PageModel
    {
        private readonly RazorPagesBook.Data.RazorPagesBookContext _context;
        public IndexModel(RazorPagesBook.Data.RazorPagesBookContext context)
        {
            _context = context;
        }
        public IList<Book> Book { get;set; }
        public async Task OnGetAsync()
        {
            Book = await _context.Book.ToListAsync();
        }
    }
}
 
Razor sayfaları PageModel den türemiştir.  Constructor dependency injection u kullanarak RazorPagesBookContext i sayfaya ekler. Bütün scaffolded sayfaları bu pattern i uygular.
Sayfa için bir istek yapıldığında OnGetAsync methodu sayfaya kitaplar listesini döndürür. Sayfanın başlangıç durumu için OnGetAsync veya OnGet methodu çağrılır. 
 
OnGet void veya OnGetAsync Task döndüğünde herhangi bir return ifadesi kullanılmasına gerek yoktur.
 
@page
@model RazorPagesBook.Pages.Books.IndexModel
@{
    ViewData["Title"] = "Index";
}
<h1>Index</h1>
<p>
    <a asp-page="Create">Create New</a>
</p>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Book[0].Name)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Book[0].Price)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Book[0].PublishDate)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model.Book) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Price)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PublishDate)
            </td>
            <td>
                <a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> |
                <a asp-page="./Details" asp-route-id="@item.Id">Details</a> |
                <a asp-page="./Delete" asp-route-id="@item.Id">Delete</a>
            </td>
        </tr>
}
    </tbody>
</table>
 
Razor HTML den C# koduna veya Razor spesific markup ına geçiş yapabilir. @ sembolünden sonra Razor için ayrılmış herhangi bir keyword kullanıldığında, Razor markup ına geçiş yapılır.
@page Razor direktifi dosyayı MVC action ı yapar ve istekleri işlyebileceği anlamına gelir.@page sayfadaki ilk Razor direktifi olmalıdır.
 
@model direktifi sayfaya iletilen modelin tipini belirtir.@model satırı ,PageModel den türetilen sınıfı Razor sayfası için kullanılabilir hale getirir.

3 thoughts on “Razor Pages Başlangıç

  1. […] Razor Pages, sayfa odaklı senaryoları kodlamayı daha kolay ve daha verimli hale getirir. […]

  2. karadag says:

    yazının devamı yok mu acaba Yarım kalmış?

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.