Şimdi Alan modeli için tam bir CRUD işlemi gerçekleştireceğiz. Alanlar butonuna tıklandığında ilgili controller ve action çalışacak.
Controllers/Admin klasörü altında AlanController.cs dosyasını oluştur.
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using SchoolManagement.Data;
using SchoolManagement.Models;
namespace SchoolManagement.Controllers.Admin
{
[Authorize(Roles = "Admin")] // Sadece admin kullanıcıları erişebilecek
public class AlanController : Controller
{
private readonly ApplicationDbContext _context;
public AlanController(ApplicationDbContext context)
{
_context = context;
}
// Alanları Listeleme
public async Task<IActionResult> Index(string searchString)
{
var alanlar = from a in _context.Alanlar
select a;
// Eğer arama yapılıyorsa, arama kriterine göre alanları filtreliyoruz
if (!string.IsNullOrEmpty(searchString))
{
alanlar = alanlar.Where(a => a.AlanAdi.Contains(searchString));
}
return View("~/Views/Admin/Alan/Index.cshtml", await alanlar.ToListAsync());
}
// Yeni Alan Ekleme (GET)
public IActionResult Create()
{
return View("~/Views/Admin/Alan/Create.cshtml");
}
// Yeni Alan Ekleme (POST)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Alan alan)
{
if (ModelState.IsValid)
{
_context.Add(alan);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index)); // Alanlar sayfasına yönlendiriyoruz
}
return View("~/Views/Admin/Alan/Create.cshtml", alan); // Hata varsa aynı sayfayı tekrar gösteriyoruz
}
// Alan Düzenleme (GET)
public async Task<IActionResult> Edit(int id)
{
var alan = await _context.Alanlar.FindAsync(id);
if (alan == null) return NotFound(); // Alan bulunamazsa hata sayfasına yönlendir
return View("~/Views/Admin/Alan/Edit.cshtml", alan);
}
// Alan Düzenleme (POST)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, Alan alan)
{
if (id != alan.Id) return NotFound(); // ID uyuşmazsa hata sayfasına yönlendir
if (ModelState.IsValid)
{
_context.Update(alan);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index)); // Alanlar sayfasına yönlendir
}
return View("~/Views/Admin/Alan/Edit.cshtml", alan); // Hata varsa aynı sayfayı tekrar göster
}
// Alan Silme (GET)
public async Task<IActionResult> Delete(int id)
{
var alan = await _context.Alanlar.FindAsync(id);
if (alan == null) return NotFound(); // Alan bulunamazsa hata sayfasına yönlendir
return View("~/Views/Admin/Alan/Delete.cshtml", alan);
}
// Alan Silme (POST)
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var alan = await _context.Alanlar.FindAsync(id);
if (alan != null)
{
_context.Alanlar.Remove(alan);
await _context.SaveChangesAsync();
}
return RedirectToAction(nameof(Index)); // Alanlar sayfasına yönlendir
}
}
}
Alanlar Butonunu Güncelle
<li><a class="dropdown-item" asp-controller="Alan" asp-action="Index">Alanlar</a></li>
Alanlar Sayfası (Index.cshtml)
Views/Admin/Alan/Index.cshtml
@model IEnumerable<SchoolManagement.Models.Alan>
@{
ViewData["Title"] = "Alanlar";
}
<h2>Alan Listesi</h2>
<p>
<a class="btn btn-primary" asp-action="Create">Yeni Alan 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>Alan Adı</th>
<th>İşlemler</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.AlanAdi</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>
Alan Ekleme Sayfası (Create.cshtml)
Views/Admin/Alan/Create.cshtml
@model SchoolManagement.Models.Alan
@{
ViewData["Title"] = "Yeni Alan Ekle";
}
<h2>Yeni Alan Ekle</h2>
<form asp-action="Create" method="post">
<div class="form-group">
<label asp-for="AlanAdi"></label>
<input asp-for="AlanAdi" 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>
Alan Güncelleme Sayfası (Edit.cshtml)
Views/Admin/Alan/Edit.cshtml
@model SchoolManagement.Models.Alan
@{
ViewData["Title"] = "Alan Düzenle";
}
<h2>Alan Düzenle</h2>
<form asp-action="Edit" method="post">
<input type="hidden" asp-for="Id" />
<div class="form-group">
<label asp-for="AlanAdi"></label>
<input asp-for="AlanAdi" 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>
Alan Silme Sayfası (Delete.cshtml)
Views/Admin/Alan/Delete.cshtml
@model SchoolManagement.Models.Alan
@{
ViewData["Title"] = "Alan Sil";
}
<h2>Alan Sil</h2>
<p>@Model.AlanAdi adlı alanı 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>