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"; }@section Scripts { @{ await Html.RenderPartialAsync("_ValidationScriptsPartial");} }
Yeni Makine Oluştur
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">@foreach (var item in Model.KullaniciMakineViewModel.Makineler) { @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)) { } } < /table> } @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 }
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.