ASP NET CORE RAZOR PAGE BAKIM TEKNİK SERVİS PROJESİ 032 YENİ MAKİNE KAYDI OLUŞTURMA

Bu dersimizde makine ekleme, makine oluşturma işlemleri için ilgili sayfamızı tasarlama ile işlemlerimize başlayalım. Projemde Pages > Makineler içine yeni bir razor page ekliyorum adını da Create veriyorum. Tasarımımızı yapalım.

Dersin daha detaylı anlatımı için ve kod takibi için video eğitimi izleyiniz.

@page
@model GursoyCNCBakim.Pages.Makineler.CreateModel
@{
    ViewData["Title"] = "Create";
    Layout = "~/Pages/Shared/_Layout.cshtml";
}


Yeni Makine Oluştur


@section Scripts { @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");} }

Buradan şimdi backend tarafına gidip, kodlarımızı yazalım. Yani ben yeni bir makine oluşturma, ekleme butonuna bastığımda ne gibi işlemler nasıl yapılacak bunları yazalım.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;
using GursoyCNCBakim.Data;
using GursoyCNCBakim.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace GursoyCNCBakim.Pages.Makineler
{
    public class CreateModel : PageModel
    {
        private readonly ApplicationDbContext _db;

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

        [TempData]
        public string DurumMesaj { get; set; }

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

        public IActionResult OnGet(string userId = null)
        {
            Makine = new Makine();
            if (userId == null)
            {
                var claimsIdentity = (ClaimsIdentity)User.Identity;
                var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
                userId = claim.Value;
            }

            Makine.KullaniciId = userId;
            return Page();
        }

        public async Task< IActionResult > OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _db.Makine.Add(Makine);
            await _db.SaveChangesAsync();
            DurumMesaj = "Makine başarılı bir şekilde eklenmiştir!";
            return RedirectToPage("Index", new { kullaniciId = Makine.KullaniciId });
        }
    }
}

Benim yukarıda yazdığım mesajı görüntüleyebilmem için Pages > Makineler klasörü içinde yer alan Index sayfasına gelip düzenleme yapmam lazım. Öncelikle pagemodel classımda aşağıdaki şekilde düzenleme yapıyorum.

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

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

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

        [TempData]
        public string DurumMesaj { get; set; }

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

        public async Task< IActionResult > OnGet(string kullaniciID = null)
        {
            if (kullaniciID == null)
            {
                var claimsIdentity = (ClaimsIdentity)User.Identity;
                var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
                kullaniciID = claim.Value;
            }

            KullaniciMakineViewModel = new KullaniciMakineViewModel()
            {
                Makineler = await _db.Makine.Where(a => a.KullaniciId == kullaniciID).ToListAsync(),
                KullaniciObj = await _db.ApplicationUser.FirstOrDefaultAsync(a => a.Id == kullaniciID)
            };

            return Page();
        }
    }
}

Buradan da Index razor page sayfasına gelip düzenleme yapıcam. Ancak onun öncesinde bu durum mesajını verebilmek için ben ASP.NET Core Identity yapısı içinde var olan _StatusMessage.cshtml dosyasını kullanacağaım. Dolayısı ile Areas > Identity > Pages > Account > Manage klasörüne geliyorum ve burada yer alan _StatusMessage.cshtml dosyamı sağ tıklayıp, kopyala deyip; Pages > Shared klasörü altına kopyalıyorum.

Daha sonra Makineler > Index.cshtml dosyama geliyor ve kodlarımı yazıyorum.

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


< partial name="_StatusMessage" model="Model.DurumMesaj" />

Müşteri Makine Kaydı

@if (User.IsInRole(StatikRoller.AdminKullanici)) { Kullanıcıları Listele }
@if (Model.KullaniciMakineViewModel.Makineler.Count() == 0) {

Herhangi bir makine kaydı bulunamadı, lütfen makine kaydı ekleyiniz.

} else { < table class="table table-striped border"> @Html.DisplayNameFor(a => a.KullaniciMakineViewModel.Makineler.FirstOrDefault().SN) @Html.DisplayNameFor(a => a.KullaniciMakineViewModel.Makineler.FirstOrDefault().Marka) @Html.DisplayNameFor(a => a.KullaniciMakineViewModel.Makineler.FirstOrDefault().Model) @Html.DisplayNameFor(a => a.KullaniciMakineViewModel.Makineler.FirstOrDefault().MakineTipi) @if (User.IsInRole(StatikRoller.AdminKullanici)) { } @foreach (var item in Model.KullaniciMakineViewModel.Makineler) { @Html.DisplayFor(a => item.SN) @Html.DisplayFor(a => item.Marka) @Html.DisplayFor(a => item.Model) @Html.DisplayFor(a => item.MakineTipi)   Bakım Geçmişi @if (User.IsInRole(StatikRoller.AdminKullanici)) {   Yeni Bakım Oluştur } } < /table> }

Test sonucu her şey çalışıyor. Video kısımda daha fazla detay bulabilir ve sonucu görebilirsiniz. Bir sonraki derste görüşmek üzere.

Bir cevap yazın

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