01.04.06. Razor Pages: Arama

Bu bölüm, bir veritabanında EF Core ile arama yapın sonuçları bir tablo içinde göstermeyi gerçekleştirmeye ayrıldı. Bunun için Razor Pages: Index bölümdeki kodları modifiye edeceğiz.

Arama yapmak için tarayıcı üzerinden arama kriterlerini almalıyız. GET veya POST ile input içindeki value değerlerini alabiliriz. Bu bölümde bir açılır liste (select) bir de klasik text kullanacağız. Index.cshtml aşağıdaki kodu ekleyerek başlayalım.

form bölümü boş olduğuna göre default ayarlara göre çalışacak. Default method GET ve action ise kendi sayfasına gönderme yapar. Select bölümü açılır seçimlik bir sunar. input etiketindeki type ise text sunar. asp.for etiketinin HTML helpers etiketi olduğunu belirtmiştik. Bu etiketler sunucu tarafında yorumlanır ve uygun etiketlere çevrilir. Örneğin, çalışan bir örnek için (örneğimiz sadece bu değişiklikle çalışmaz) oluşan form içeriği:

asp-for HTML Helper’ının name ve id değerlerine döndürüldüğü görülmektedir. Fakat, option bölümüne All değerine 3 yeni veri eklendiğini görüyoruz. Şimdi bu verileri nasıl elde edeceğimize bakalım. Yukarıdaki değerleri eklemek için Index.cshtml.cs dosyasındaki OnGetAsync bölümüne aşağıdaki satırlar eklenir.

Index.cshtml dosyasındaki asp-items=”Model.Genres” Index.cshtml dosyasındaki  SelectList Genres değişkeni ile ilişkilidir. Veriler direkt bu bölümden gelecektir. Mevcut Genres LINQ ile OnGetAsync metodu içinde seçilir. Genres yeni bir SelectList oluşturulurken Distinct() metodu ile tekrarlayan değerler elenir ve sonuçlar listeye çevrilir. OnGetAsync metodu tüm GET isteklerinde çalışacak metottur. Şimdi kodumuza arama özelliklerini de ekleyelim.

Koda SearchString, Genres, MovieGenre adında üç değişken eklenmiştir. Genres’in nerede kullanıldığın anlatılmıştı. SearchString ve MovieGenre [BindProperty(SupportsGet = true)] özelliği eklenmiştir. Bu değişkenler içine değerlerin URL üzerinden GET ile geleceğini gösterir. OnGetAsync() metodunda eğer bu değişkenlere veri gelirse mevcut bir movies listesinde movies = movies.Where(s => s.Title.Contains(SearchString)); ile güncelleme yapılır. Barada Where bir LINQ ifadesidir ve Title değerini içerenleri döndürür. Contains kelimesi aslında like sorgusu gibi davranır. Aynı şekilde MovieGenre değeri var ise bu sefer Contains yerine “==” kullanılır. “x => x.Genre == MovieGenre” bu kullanımın sebebi aranan değere tam eşit olması gerektiğini belirtir.  Yukarıdaki kodlarla arama bölümü de hazır.