Razor Pages Scaffolding

 Scaffolding bir terim. İngilizce den Türkçe ye çevirdiğinizde iskele,yapı iskelesi,iskele kurmak gibi anlamlara denk geliyor. Programlama kısmında ise Scaffolding size otomatik olarak CRUD işlemlerini gerçekleştireceğiniz sayfaları üretiyor.

Pages klasörüne sağ tıklayıp, Add->New Folder ile Books adında bir klasör oluşturalım.
Daha sonrasında aşağıdaki görseldeki gibi, 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 resim-deki 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 gerekli olan 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.

One thought on “Razor Pages Scaffolding

  1. […] Razor Pages Scaffolding bu yazıda yazdığıma benzer bir şekilde Scaffoling aracılığıyla bu sefer MVC için, Post entity içim MVC Controller with view,using Entity Framework seçeneğinden otomatik olarak kodlarımı oluşturdum. […]

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.