ASP NET CORE RAZOR PAGE BAKIM TEKNİK SERVİS PROJESİ 022 KULLANICILAR SAYFASINDA ARAMA İŞLEMİ

Bu dersimizde de kullanıcıları listelediğimiz sayfa da arama kriteri oluşturalım. Çünkü diyelim ki benim yüzlerce hatta binlerce müşterim var. Ben bir müşteriyi bulmak için sayfa sayfa vatandaş mı arayacağım. Mantıklı değil tabii ki, dolayısı ile ben burada bir arama kriteri koyarak yola devam edebilirim.

Dersin daha detaylı anlatımı ve kod takibi için video eğitim:

Bunun için Pages > Kullanicilar > Index.cshtml dosyama geliyor ve en üst kısma yeni bir alan ekliyorum.

@page
@model GursoyCNCBakim.Pages.Kullanicilar.IndexModel
@{
    ViewData["Title"] = "Index";
    Layout = "~/Pages/Shared/_Layout.cshtml";
}



Kullanici Listesi


@Html.Editor("aramaAdSoyad", new { htmlAttributes = new { @class = "form-control", placeholder = "Ad Soyad..." } });
@Html.Editor("aramaTelefon", new { htmlAttributes = new { @class = "form-control", placeholder = "Telefon..." } });
@Html.Editor("aramaEmail", new { htmlAttributes = new { @class = "form-control", placeholder = "E-mail..." } });
@foreach (var item in Model.UsersListViewModel.ApplicationUserList) { }
@Html.DisplayNameFor(m => m.UsersListViewModel.ApplicationUserList[0].AdSoyad) @Html.DisplayNameFor(m => m.UsersListViewModel.ApplicationUserList[0].PhoneNumber) @Html.DisplayNameFor(m => m.UsersListViewModel.ApplicationUserList[0].Email)
@Html.DisplayFor(m => item.AdSoyad) @Html.DisplayFor(m => item.PhoneNumber) @Html.DisplayFor(m => item.Email)

Ben burada ad-soyad, email ve telefona göre arama kriterleri için iligli textboxlarımı yerleştirdim.

Bir de arama işlemini tetiklemesi için buton ekledim.

Arama işlemi için tasarım tarafım bitti, şimdi kullanıcı ara butonuna basınca ne işlem gerçekleştirilecek bunu kodlamamız gerek. Dolayısı ile bu sayfanın codebehind tarafına geçiyor ve kodlarımı yazıyorum.

Index.cshtml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using GursoyCNCBakim.Data;
using GursoyCNCBakim.Models;
using GursoyCNCBakim.Models.ViewModel;
using GursoyCNCBakim.Utility;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;

namespace GursoyCNCBakim.Pages.Kullanicilar
{
    public class IndexModel : PageModel
    {
        private readonly ApplicationDbContext _db;

        public IndexModel(ApplicationDbContext db)
        {
            _db = db;
        }

        [BindProperty]
        public UsersListViewModel UsersListViewModel { get; set; }

        public async Task< IActionResult > OnGet(int productPage = 1, string aramaAdSoyad=null, string aramaEmail=null, string aramaTelefon=null)
        {
            UsersListViewModel = new UsersListViewModel()
            {
                ApplicationUserList = await _db.ApplicationUser.ToListAsync()
            };

            StringBuilder param = new StringBuilder();
            param.Append("/Kullanicilar?productPage=:");
            
            param.Append("&aramaAdSoyad=");
            if (aramaAdSoyad!=null)
            {
                param.Append(aramaAdSoyad);
            }

            param.Append("&aramaEmail=");
            if (aramaEmail!=null)
            {
                param.Append(aramaEmail);
            }

            param.Append("&aramaTelefon=");
            if (aramaTelefon != null)
            {
                param.Append(aramaTelefon);
            }

            if(aramaAdSoyad!=null)
            {
                UsersListViewModel.ApplicationUserList = await _db.ApplicationUser.Where(a => a.AdSoyad.ToLower().Contains(aramaAdSoyad.ToLower())).ToListAsync();
            }

            else
            {
                if(aramaEmail!=null)
                {
                    UsersListViewModel.ApplicationUserList = await _db.ApplicationUser.Where(a => a.Email.ToLower().Contains(aramaEmail.ToLower())).ToListAsync();
                }
                else
                {
                    if(aramaTelefon!=null)
                    {
                        UsersListViewModel.ApplicationUserList = await _db.ApplicationUser.Where(a => a.PhoneNumber.ToLower().Contains(aramaTelefon.ToLower())).ToListAsync();
                    }
                }
            }


            var sayi = UsersListViewModel.ApplicationUserList.Count;

            UsersListViewModel.PagingInfo = new PagingInfo()
            {
                CurrentPage = productPage,
                ItemsPerPage = StatikRoller.KullaniciSayfalamaSayfaBoyutu,
                TotalItems = sayi,
                UrlParam = param.ToString()
            };

            UsersListViewModel.ApplicationUserList = UsersListViewModel.ApplicationUserList.OrderBy(a => a.Email).Skip((productPage - 1) * StatikRoller.KullaniciSayfalamaSayfaBoyutu).Take(StatikRoller.KullaniciSayfalamaSayfaBoyutu).ToList();

            return Page();
        }
    }
}

Öncelikle OnGet metodumda arama kriterlerinin girilebilme durumu için argümanlarımı tanımlamam gerekti. Bunları tanımladım, 3 kriterde arama yapabiliyorum ad-soyad, email ve telefon numarası, dolayısı ile 3 argüman ekledim. Aramalarda bir veya birden fazla kriter boş olabilir, hangisinin boş olacağını bilmediğimiz için default olarak değerlerini null ayarladım.

Daha sonra benim arama kriterimin url’e işlenmesi için ilgili kodlarımı yazdım. Daha önce tanımladığım param değişkenine bu sefer arama kriterime ilişkin parametre söz dizimim ve arama ifadem gelecek. Daha sonra if kontrolleri ile hangi textbox’dan veri gelecek ise buna göre param için eklenecek kriteri buluyorum.

Daha sonraki if bloğum ile de artık filtremele işlemini kontrol ediyorum. Yani üstte iligli url’i oluşturduk, şimdi de neler listelenecek? Onu buluyoruz. Eğer mail girildi ise ona ilişkin if bloğum, eğer ad-soyad girildi ise ona ilişkin if bloğum, eğer telefon girildi ise ona ilişkin if-else bloğum çalışıyor.

Deneyelim görelim.

Tüm kriterleri denedik ve çalışıyor tabi birden fazla arama kriterine bastığınızda kodlarımızın mantğı gereği VEYA şeklinde davranarak her iki kriterdeki veya üç kriterdeki sonuçları listeliyor. Yani şartımız AND mantığı ile değil OR mantığı ile çalışmakta. Siz eğer AND istiyor iseniz buna göre düzenleme yapabilirsiniz.

Dersin video versiyonunu mutlaka izleyin. Bir sonraki derste görüşmek üzere.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir