Dal modeli ile ilgili gerekli değişiklikleri ve CRUD işlemlerini gerçekleştirecek şekilde düzenlemeleri yapalım.
DalController Oluşturulması
Controllers/Admin klasörüne DalController.cs dosyasını ekleyelim ve CRUD işlemleri 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")] // Sadece admin kullanıcıları erişebilecek
public class DalController : Controller
{
private readonly ApplicationDbContext _context;
public DalController(ApplicationDbContext context)
{
_context = context;
}
// Dalları Listeleme
public async Task<IActionResult> Index(string searchString)
{
var dallar = from d in _context.Dallar
select d;
// Eğer arama yapılıyorsa, arama kriterine göre dalları filtreliyoruz
if (!string.IsNullOrEmpty(searchString))
{
dallar = dallar.Where(d => d.DalAdi.Contains(searchString));
}
return View("~/Views/Admin/Dal/Index.cshtml", await dallar.ToListAsync());
}
// Yeni Dal Ekleme (GET)
public IActionResult Create()
{
return View("~/Views/Admin/Dal/Create.cshtml");
}
// Yeni Dal Ekleme (POST)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Dal dal)
{
if (ModelState.IsValid)
{
_context.Add(dal);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index)); // Dallar sayfasına yönlendiriyoruz
}
return View("~/Views/Admin/Dal/Create.cshtml", dal); // Hata varsa aynı sayfayı tekrar gösteriyoruz
}
// Dal Düzenleme (GET)
public async Task<IActionResult> Edit(int id)
{
var dal = await _context.Dallar.FindAsync(id);
if (dal == null) return NotFound(); // Dal bulunamazsa hata sayfasına yönlendir
return View("~/Views/Admin/Dal/Edit.cshtml", dal);
}
// Dal Düzenleme (POST)
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, Dal dal)
{
if (id != dal.Id) return NotFound(); // ID uyuşmazsa hata sayfasına yönlendir
if (ModelState.IsValid)
{
_context.Update(dal);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index)); // Dallar sayfasına yönlendir
}
return View("~/Views/Admin/Dal/Edit.cshtml", dal); // Hata varsa aynı sayfayı tekrar göster
}
// Dal Silme (GET)
public async Task<IActionResult> Delete(int id)
{
var dal = await _context.Dallar.FindAsync(id);
if (dal == null) return NotFound(); // Dal bulunamazsa hata sayfasına yönlendir
return View("~/Views/Admin/Dal/Delete.cshtml", dal);
}
// Dal Silme (POST)
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var dal = await _context.Dallar.FindAsync(id);
if (dal != null)
{
_context.Dallar.Remove(dal);
await _context.SaveChangesAsync();
}
return RedirectToAction(nameof(Index)); // Dallar sayfasına yönlendir
}
}
}
Dal Butonunu Güncelleme
Alanlar butonunun olduğu menüde, Dallar için yeni bir buton ekleyelim. Bu buton, DalController'ın Index action'ına yönlendirecek.
<li><a class="dropdown-item" asp-controller="Dal" asp-action="Index">Dallar</a></li>
Dal Sayfası (Index.cshtml)
Dalların listeleneceği ana sayfayı Views/Admin/Dal/Index.cshtml dosyasına ekleyelim.
@model IEnumerable<SchoolManagement.Models.Dal>
@{
ViewData["Title"] = "Dallar";
}
<h2>Dal Listesi</h2>
<p>
<a class="btn btn-primary" asp-action="Create">Yeni Dal 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>Dal Adı</th>
<th>İşlemler</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Id</td>
<td>@item.DalAdi</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>
Dal Ekleme Sayfası (Create.cshtml)
Yeni Dal eklemek için Views/Admin/Dal/Create.cshtml dosyasını oluşturacağız.
@model SchoolManagement.Models.Dal
@{
ViewData["Title"] = "Yeni Dal Ekle";
}
<h2>Yeni Dal Ekle</h2>
<form asp-action="Create" method="post">
<div class="form-group">
<label asp-for="DalAdi"></label>
<input asp-for="DalAdi" 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>
Dal Güncelleme Sayfası (Edit.cshtml)
Dal düzenleme işlemi için Views/Admin/Dal/Edit.cshtml dosyasını ekleyelim.
@model SchoolManagement.Models.Dal
@{
ViewData["Title"] = "Dal Düzenle";
}
<h2>Dal Düzenle</h2>
<form asp-action="Edit" method="post">
<input type="hidden" asp-for="Id" />
<div class="form-group">
<label asp-for="DalAdi"></label>
<input asp-for="DalAdi" 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>
Dal Silme Sayfası (Delete.cshtml)
Dal silme işlemi için Views/Admin/Dal/Delete.cshtml dosyasını oluşturalım.
@model SchoolManagement.Models.Dal
@{
ViewData["Title"] = "Dal Sil";
}
<h2>Dal Sil</h2>
<p>@Model.DalAdi adlı dalı 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>