Sınıflara ait dersleri atama işlemini ve CRUD işlemlerini gerçekleştirebiliriz. Aşağıda DersAra için gerekli adımlar ve dosya yapısı yer alıyor.
Controllers/Admin/DersAraController.cs dosyasını oluşturarak CRUD işlemlerini gerçekleştirelim.
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using SchoolManagement.Data;
using SchoolManagement.Models;
namespace SchoolManagement.Controllers.Admin
{
//[Area("Admin")]
[Authorize(Roles = "Admin")] // Sadece admin kullanıcıları erişebilecek
public class DersAraController : Controller
{
private readonly ApplicationDbContext _context;
public DersAraController(ApplicationDbContext context)
{
_context = context;
}
// GET: Admin/DersAra
public async Task<IActionResult> Index()
{
var dersAra = await _context.DersAralar
.Include(d => d.Ders)
.Include(d => d.Sinif)
.ToListAsync();
return View("~/Views/Admin/DersAra/Index.cshtml", dersAra);
}
// GET: Admin/DersAra/Details/5
public async Task<IActionResult> Details(int? id)
{
if (id == null)
{
return NotFound();
}
var dersAra = await _context.DersAralar
.Include(d => d.Ders)
.Include(d => d.Sinif)
.FirstOrDefaultAsync(m => m.Id == id);
if (dersAra == null)
{
return NotFound();
}
return View("~/Views/Admin/DersAra/Details.cshtml",dersAra);
}
// GET: Admin/DersAra/Create
public IActionResult Create()
{
ViewData["DersId"] = new SelectList(_context.Dersler, "Id", "DersAdi");
ViewData["SinifId"] = new SelectList(_context.Siniflar, "Id", "SinifAdi");
return View("~/Views/Admin/DersAra/Create.cshtml");
}
// POST: Admin/DersAra/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,DersId,SinifId")] DersAra dersAra)
{
if (!ModelState.IsValid)
{
// Check if this course is already assigned to this class
var exists = await _context.DersAralar
.AnyAsync(d => d.DersId == dersAra.DersId && d.SinifId == dersAra.SinifId);
if (exists)
{
ModelState.AddModelError("", "Bu ders zaten bu sınıfa atanmış.");
ViewData["DersId"] = new SelectList(_context.Dersler, "Id", "DersAdi", dersAra.DersId);
ViewData["SinifId"] = new SelectList(_context.Siniflar, "Id", "SinifAdi", dersAra.SinifId);
return View("~/Views/Admin/DersAra/Create.cshtml", dersAra);
}
_context.Add(dersAra);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
ViewData["DersId"] = new SelectList(_context.Dersler, "Id", "DersAdi", dersAra.DersId);
ViewData["SinifId"] = new SelectList(_context.Siniflar, "Id", "SinifAdi", dersAra.SinifId);
return View("~/Views/Admin/DersAra/Create.cshtml",dersAra);
}
// GET: Admin/DersAra/Edit/5
public async Task<IActionResult> Edit(int? id)
{
if (id == null)
{
return NotFound();
}
var dersAra = await _context.DersAralar.FindAsync(id);
if (dersAra == null)
{
return NotFound();
}
ViewData["DersId"] = new SelectList(_context.Dersler, "Id", "DersAdi", dersAra.DersId);
ViewData["SinifId"] = new SelectList(_context.Siniflar, "Id", "SinifAdi", dersAra.SinifId);
return View("~/Views/Admin/DersAra/Edit.cshtml",dersAra);
}
// POST: Admin/DersAra/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("Id,DersId,SinifId")] DersAra dersAra)
{
if (id != dersAra.Id)
{
return NotFound();
}
if (ModelState.IsValid)
{
try
{
// Check if this course is already assigned to this class (excluding the current record)
var exists = await _context.DersAralar
.AnyAsync(d => d.DersId == dersAra.DersId &&
d.SinifId == dersAra.SinifId &&
d.Id != dersAra.Id);
if (exists)
{
ModelState.AddModelError("", "Bu ders zaten bu sınıfa atanmış.");
ViewData["DersId"] = new SelectList(_context.Dersler, "Id", "DersAdi", dersAra.DersId);
ViewData["SinifId"] = new SelectList(_context.Siniflar, "Id", "SinifAdi", dersAra.SinifId);
return View(dersAra);
}
_context.Update(dersAra);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!DersAraExists(dersAra.Id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction(nameof(Index));
}
ViewData["DersId"] = new SelectList(_context.Dersler, "Id", "DersAdi", dersAra.DersId);
ViewData["SinifId"] = new SelectList(_context.Siniflar, "Id", "SinifAdi", dersAra.SinifId);
return View("~/Views/Admin/DersAra/Edit.cshtml", dersAra);
}
// GET: Admin/DersAra/Delete/5
public async Task<IActionResult> Delete(int? id)
{
if (id == null)
{
return NotFound();
}
var dersAra = await _context.DersAralar
.Include(d => d.Ders)
.Include(d => d.Sinif)
.FirstOrDefaultAsync(m => m.Id == id);
if (dersAra == null)
{
return NotFound();
}
return View("~/Views/Admin/DersAra/Delete.cshtml", dersAra);
}
// POST: Admin/DersAra/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var dersAra = await _context.DersAralar.FindAsync(id);
_context.DersAralar.Remove(dersAra);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
private bool DersAraExists(int id)
{
return _context.DersAralar.Any(e => e.Id == id);
}
}
}
Menüde, Sınıflar ve Dersler için yeni bir buton ekleyelim. Bu buton, DersAraController'ın Index action'ına yönlendirecek.
<!-- Atama İşlemleri Dropdown Menüsü -->
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="atamaDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
Atama İşlemleri
</a>
<ul class="dropdown-menu" aria-labelledby="atamaDropdown">
<li><a class="dropdown-item" asp-controller="DersAra" asp-action="Index">Sınıf ve Dersler</a></li>
</ul>
</li>
Sınıf ve derslerin listeleneceği ana sayfayı Views/Admin/DersAra/Index.cshtml dosyasına ekleyelim.
@model IEnumerable<SchoolManagement.Models.DersAra>
@{
ViewData["Title"] = "Sınıf-Ders Atamaları";
}
<h1>Sınıf-Ders Atamaları</h1>
<p>
<a asp-action="Create" class="btn btn-primary">Yeni Atama</a>
</p>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>
Sınıf
</th>
<th>
Ders
</th>
<th>İşlemler</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Sinif.SinifAdi)
</td>
<td>
@Html.DisplayFor(modelItem => item.Ders.DersAdi)
</td>
<td>
<a asp-action="Edit" asp-route-id="@item.Id" class="btn btn-sm btn-warning">Düzenle</a> |
<a asp-action="Details" asp-route-id="@item.Id" class="btn btn-sm btn-info">Detaylar</a> |
<a asp-action="Delete" asp-route-id="@item.Id" class="btn btn-sm btn-danger">Sil</a>
</td>
</tr>
}
</tbody>
</table>
Sınıfa yeni Ders eklemek için Views/Admin/DersAra/Create.cshtml dosyasını oluşturacağız.
@model SchoolManagement.Models.DersAra
@{
ViewData["Title"] = "Yeni Ders Atama";
}
<h1>Yeni Ders Atama</h1>
<hr />
<div class="row">
<div class="col-md-6">
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group mb-3">
<label asp-for="SinifId" class="control-label">Sınıf</label>
<select asp-for="SinifId" class="form-control" asp-items="ViewBag.SinifId"></select>
<span asp-validation-for="SinifId" class="text-danger"></span>
</div>
<div class="form-group mb-3">
<label asp-for="DersId" class="control-label">Ders</label>
<select asp-for="DersId" class="form-control" asp-items="ViewBag.DersId"></select>
<span asp-validation-for="DersId" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Kaydet" class="btn btn-primary" />
<a asp-action="Index" class="btn btn-secondary">Listeye Dön</a>
</div>
</form>
</div>
</div>
Eklenen dersi düzenleme işlemi için Views/Admin/DersAra/Edit.cshtml dosyasını ekleyelim.
@model SchoolManagement.Models.DersAra
@{
ViewData["Title"] = "Ders Atama Düzenle";
}
<h1>Ders Atama Düzenle</h1>
<hr />
<div class="row">
<div class="col-md-6">
<form asp-action="Edit">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="Id" />
<div class="form-group mb-3">
<label asp-for="SinifId" class="control-label">Sınıf</label>
<select asp-for="SinifId" class="form-control" asp-items="ViewBag.SinifId"></select>
<span asp-validation-for="SinifId" class="text-danger"></span>
</div>
<div class="form-group mb-3">
<label asp-for="DersId" class="control-label">Ders</label>
<select asp-for="DersId" class="form-control" asp-items="ViewBag.DersId"></select>
<span asp-validation-for="DersId" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Kaydet" class="btn btn-primary" />
<a asp-action="Index" class="btn btn-secondary">Listeye Dön</a>
</div>
</form>
</div>
</div>
Sınıfa atanan dersi silme işlemi için Views/Admin/DersAra/Delete.cshtml dosyasını oluşturalım.
@model SchoolManagement.Models.DersAra
@{
ViewData["Title"] = "Ders Atama Sil";
}
<h1>Ders Atama Sil</h1>
<h3>Bu ders atamasını silmek istediğinize emin misiniz?</h3>
<div>
<hr />
<dl class="row">
<dt class="col-sm-3">Sınıf:</dt>
<dd class="col-sm-9">@Html.DisplayFor(model => model.Sinif.SinifAdi)</dd>
<dt class="col-sm-3">Ders:</dt>
<dd class="col-sm-9">@Html.DisplayFor(model => model.Ders.DersAdi)</dd>
</dl>
<form asp-action="Delete">
<input type="hidden" asp-for="Id" />
<input type="submit" value="Sil" class="btn btn-danger" /> |
<a asp-action="Index" class="btn btn-secondary">Listeye Dön</a>
</form>
</div>