Gruplar için gerekli düzenlemeleri yapmak amacıyla Gruplar modelini oluşturup, CRUD işlemlerini gerçekleştirecek GrupController'ı ekleyelim. Aynı zamanda grup sayfasını (Index), grup ekleme (Create), grup düzenleme (Edit), ve grup silme (Delete) sayfalarını oluşturacağız.
GroupController Oluşturulması
Şimdi, Admin klasöründe GroupController'ı ekleyerek CRUD işlemlerini gerçekleştirelim.
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using SchoolManagement.Data;
using SchoolManagement.Models;
namespace SchoolManagement.Controllers.Admin
{
[Authorize(Roles = "Admin")] // Admin role sahip kullanıcıların erişebilmesi için
public class GrupController : Controller
{
private readonly ApplicationDbContext _context;
public GrupController(ApplicationDbContext context)
{
_context = context;
}
// Grupları Listeleme
public async Task<IActionResult> Index(string searchString)
{
var gruplar = from g in _context.Gruplar
select g;
if (!string.IsNullOrEmpty(searchString))
{
gruplar = gruplar.Where(g => g.GrupAdi.Contains(searchString)); // GrupAdi'na göre arama
}
return View("~/Views/Admin/Grup/Index.cshtml", await gruplar.ToListAsync());
}
// Yeni Grup Ekleme (GET)
public IActionResult Create()
{
return View("~/Views/Admin/Grup/Create.cshtml");
}
// Yeni Grup Ekleme (POST)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Grup grup)
{
if (ModelState.IsValid)
{
_context.Add(grup); // Yeni grup ekleme
await _context.SaveChangesAsync(); // Değişiklikleri kaydet
return RedirectToAction(nameof(Index)); // Gruplar listesine yönlendir
}
return View("~/Views/Admin/Grup/Create.cshtml", grup); // Hata varsa tekrar aynı sayfayı göster
}
// Grup Düzenleme (GET)
public async Task<IActionResult> Edit(int id)
{
var grup = await _context.Gruplar.FindAsync(id);
if (grup == null)
{
return NotFound(); // Grup bulunamazsa hata döndür
}
return View("~/Views/Admin/Grup/Edit.cshtml", grup); // Düzenleme sayfasını göster
}
// Grup Düzenleme (POST)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, Grup grup)
{
if (id != grup.Id)
{
return NotFound(); // Eğer id uyuşmazsa hata döndür
}
if (ModelState.IsValid)
{
_context.Update(grup); // Grupları güncelle
await _context.SaveChangesAsync(); // Değişiklikleri kaydet
return RedirectToAction(nameof(Index)); // Gruplar listesine yönlendir
}
return View("~/Views/Admin/Grup/Edit.cshtml", grup); // Hata varsa tekrar aynı sayfayı göster
}
// Grup Silme (GET)
public async Task<IActionResult> Delete(int id)
{
var grup = await _context.Gruplar.FindAsync(id);
if (grup == null)
{
return NotFound(); // Grup bulunamazsa hata döndür
}
return View("~/Views/Admin/Grup/Delete.cshtml", grup); // Silme sayfasını göster
}
// Grup Silme (POST)
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var grup = await _context.Gruplar.FindAsync(id);
if (grup != null)
{
_context.Gruplar.Remove(grup); // Grubu sil
await _context.SaveChangesAsync(); // Değişiklikleri kaydet
}
return RedirectToAction(nameof(Index)); // Gruplar listesine yönlendir
}
}
}
Gruplar Menüsüne Buton Ekleme
Tanımlamalar menüsünde Gruplar butonunu ekleyeceğiz. Bu buton GrupController'ın Index action'ına yönlendirecek.
<li><a class="dropdown-item" asp-controller="Grup" asp-action="Index">Gruplar</a></li>
Grupların listeleneceği ana sayfayı Views/Admin/Grup/Index.cshtml dosyasına ekleyelim.
@model IEnumerable<SchoolManagement.Models.Grup>
@{
ViewData["Title"] = "Gruplar";
}
<h2>Grup Listesi</h2>
<p>
<a class="btn btn-primary" asp-action="Create">Yeni Grup Ekle</a>
</p>
<form asp-action="Index" method="get">
<input type="text" name="searchString" class="form-control w-25 d-inline" placeholder="Ara..." />
<button type="submit" class="btn btn-secondary">Ara</button>
</form>
<table class="table table-bordered mt-3">
<thead>
<tr>
<th>ID</th>
<th>Grup Adı</th>
<th>İşlemler</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.GrupAdi</td>
<td>
<a class="btn btn-warning btn-sm" asp-action="Edit" asp-route-id="@item.Id">Düzenle</a>
<a class="btn btn-danger btn-sm" asp-action="Delete" asp-route-id="@item.Id">Sil</a>
</td>
</tr>
}
</tbody>
</table>
Yeni Grup Ekleme Sayfası (Create.cshtml)
Yeni bir grup eklemek için Views/Admin/Grup/Create.cshtml dosyasını oluşturuyoruz.
@model SchoolManagement.Models.Grup
@{
ViewData["Title"] = "Yeni Grup Ekle";
}
<h2>Yeni Grup Ekle</h2>
<form asp-action="Create" method="post">
<div class="form-group">
<label asp-for="GrupAdi"></label>
<input asp-for="GrupAdi" class="form-control" required />
</div>
<button type="submit" class="btn btn-success mt-2">Kaydet</button>
</form>
<p>
<a asp-action="Index">Geri Dön</a>
</p>
Grup Güncelleme Sayfası (Edit.cshtml)
Grupları düzenlemek için Views/Admin/Grup/Edit.cshtml dosyasını oluşturuyoruz.
@model SchoolManagement.Models.Grup
@{
ViewData["Title"] = "Grup Düzenle";
}
<h2>Grup Düzenle</h2>
<form asp-action="Edit" method="post">
<input type="hidden" asp-for="Id" />
<div class="form-group">
<label asp-for="GrupAdi"></label>
<input asp-for="GrupAdi" class="form-control" required />
</div>
<button type="submit" class="btn btn-primary mt-2">Güncelle</button>
</form>
<p>
<a asp-action="Index">Geri Dön</a>
</p>
Grup Silme Sayfası (Delete.cshtml)
Grupları silmek için Views/Admin/Grup/Delete.cshtml dosyasını oluşturuyoruz.
@model SchoolManagement.Models.Grup
@{
ViewData["Title"] = "Grup Sil";
}
<h2>Grup Sil</h2>
<p>@Model.GrupAdi adlı grubu silmek istediğinizden emin misiniz?</p>
<form asp-action="Delete" method="post">
<input type="hidden" asp-for="Id" />
<button type="submit" class="btn btn-danger">Sil</button>
</form>
<p>
<a asp-action="Index">Geri Dön</a>
</p>