c# Web

Öğrencilere Ait Performans ve Uygulama Notlarının Girildiği Core Mvc Projesi Tasarlama13

Sinif modelini ve ilişkili olan Alan, Dal ve Grup tabloları ile birlikte oluşturulacak controller ve görünümleri de aşağıda detaylı bir şekilde paylaşacağım. Bu yapıyı, model, controller ve ilgili sayfalarla oluşturacağız.

Öncelikle, Sinif modelinizi şu şekilde oluşturuyoruz:

namespace SchoolManagement.Models
{
    public class Sinif
    {
        public int Id { get; set; }
        public string SinifAdi { get; set; }
        public int? AlanId { get; set; } 
        public Alan? Alan { get; set; }   
        public int? DalId { get; set; }   
        public Dal? Dal { get; set; }      
        public int? GrupId { get; set; }  
        public Grup? Grup { get; set; }    
    }
}

Burada, Sinif modeli, Alan, Dal ve Grup ile ilişkili. Bu ilişkiler Foreign Key kullanarak sağlanıyor. İlişkiye dikkat ediniz, alanların boş girilmesi yeterli oluyor.

Sinif için CRUD işlemleri yapmak üzere bir controller oluşturuyoruz. Bu controller'da, Alan, Dal ve Grup verileri ile ilgili dropdown menülerini eklemek de dahil olacak.

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
{
    [Authorize(Roles = "Admin")]
    public class SinifController : Controller
    {
        private readonly ApplicationDbContext _context;

        public SinifController(ApplicationDbContext context)
        {
            _context = context;
        }

        // 1. Sınıf Listeleme
        public async Task<IActionResult> Index()
        {
            var siniflar = await _context.Siniflar
                .Include(s => s.Alan)
                .Include(s => s.Dal)
                .Include(s => s.Grup)
                .ToListAsync();

            return View("~/Views/Admin/Sinif/Index.cshtml", siniflar);
        }

        // 2. Yeni Sınıf Ekleme (GET)
        public IActionResult Create()
        {
            ViewBag.Alan = new SelectList(_context.Alanlar, "Id", "AlanAdi");
            ViewBag.Dal = new SelectList(_context.Dallar, "Id", "DalAdi");
            ViewBag.Grup = new SelectList(_context.Gruplar, "Id", "GrupAdi");

            return View("~/Views/Admin/Sinif/Create.cshtml");
        }

        // 3. Yeni Sınıf Ekleme (POST)
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create(Sinif sinif)
        {
            if (sinif.AlanId == null && sinif.DalId == null && sinif.GrupId == null)
            {
                ModelState.AddModelError("", "En az bir kategori seçilmelidir.");
            }

            if (ModelState.IsValid)
            {
                _context.Add(sinif);
                await _context.SaveChangesAsync();
                return RedirectToAction(nameof(Index));
            }

            ViewBag.Alan = new SelectList(_context.Alanlar, "Id", "AlanAdi", sinif.AlanId);
            ViewBag.Dal = new SelectList(_context.Dallar, "Id", "DalAdi", sinif.DalId);
            ViewBag.Grup = new SelectList(_context.Gruplar, "Id", "GrupAdi", sinif.GrupId);

            return View("~/Views/Admin/Sinif/Create.cshtml", sinif);
        }

        // 4. Sınıf Düzenleme (GET)
        public async Task<IActionResult> Edit(int id)
        {
            var sinif = await _context.Siniflar
                .Include(s => s.Alan)  // Alan ilişkisini dahil et
                .Include(s => s.Dal)   // Dal ilişkisini dahil et
                .Include(s => s.Grup)  // Grup ilişkisini dahil et
                .FirstOrDefaultAsync(s => s.Id == id);  // Sınıfı id'ye göre bul

            if (sinif == null)
            {
                return NotFound();  // Eğer sınıf bulunmazsa, 404 hatası döndür
            }

            // ViewBag ile ilişkili verileri View'a gönderiyoruz
            ViewBag.Alan = new SelectList(_context.Alanlar, "Id", "AlanAdi", sinif.AlanId);
            ViewBag.Dal = new SelectList(_context.Dallar, "Id", "DalAdi", sinif.DalId);
            ViewBag.Grup = new SelectList(_context.Gruplar, "Id", "GrupAdi", sinif.GrupId);

            return View("~/Views/Admin/Sinif/Edit.cshtml", sinif);  // Düzenleme sayfasına yönlendir
        }


        // 5. Sınıf Düzenleme (POST)
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Edit(int id, Sinif sinif)
        {
            if (id != sinif.Id)  // Eğer ID'ler eşleşmezse, hata döndür
            {
                return NotFound();
            }

            if (ModelState.IsValid)  // Model geçerliyse
            {
                try
                {
                    _context.Update(sinif);  // Sınıfı güncelle
                    await _context.SaveChangesAsync();  // Değişiklikleri kaydet
                }
                catch (DbUpdateConcurrencyException)  // Hata yakalanırsa
                {
                    if (!SinifExists(sinif.Id))  // Eğer sınıf yoksa, 404 hatası döndür
                    {
                        return NotFound();
                    }
                    else
                    {
                        throw;
                    }
                }
                return RedirectToAction(nameof(Index));  // Düzenleme işleminden sonra listeye dön
            }

            // Eğer model geçerli değilse, ViewBag ile ilişkili verileri tekrar gönder
            ViewBag.Alan = new SelectList(_context.Alanlar, "Id", "AlanAdi", sinif.AlanId);
            ViewBag.Dal = new SelectList(_context.Dallar, "Id", "DalAdi", sinif.DalId);
            ViewBag.Grup = new SelectList(_context.Gruplar, "Id", "GrupAdi", sinif.GrupId);

            return View("~/Views/Admin/Sinif/Edit.cshtml", sinif);  // Formu tekrar göster
        }


        // 6. Sınıf Silme (GET)
        public async Task<IActionResult> Delete(int id)
        {
            var sinif = await _context.Siniflar
                .Include(s => s.Alan)
                .Include(s => s.Dal)
                .Include(s => s.Grup)
                .FirstOrDefaultAsync(m => m.Id == id);

            if (sinif == null)
            {
                return NotFound();
            }

            return View("~/Views/Admin/Sinif/Delete.cshtml", sinif);
        }

        // 7. Sınıf Silme (POST)
        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> DeleteConfirmed(int id)
        {
            var sinif = await _context.Siniflar.FindAsync(id);
            if (sinif != null)
            {
                _context.Siniflar.Remove(sinif);
                await _context.SaveChangesAsync();
            }

            return RedirectToAction(nameof(Index));
        }

        // Sınıfın var olup olmadığını kontrol eden metod
        private bool SinifExists(int id)
        {
            return _context.Siniflar.Any(e => e.Id == id);
        }
    }
}

Sinifları listelemek için kullanılan sayfa:

@model IEnumerable<SchoolManagement.Models.Sinif>

@{
    ViewData["Title"] = "Sınıflar";
}

<h2>Sınıf Listesi</h2>

<p>
    <a class="btn btn-primary" asp-action="Create">Yeni Sınıf Ekle</a>
</p>

<table class="table table-bordered mt-3">
    <thead>
        <tr>
            <th>ID</th>
            <th>Sınıf Adı</th>
            <th>Alan</th>
            <th>Dal</th>
            <th>Grup</th>
            <th>İşlemler</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.Id</td>
                <td>@item.SinifAdi</td>
                <td>@item.Alan?.AlanAdi</td> <!-- AlanId'yi viewbag üzerinden alıp işlem yapılacaksa viewbag üzerinden render edilmesi -->
                <td>@item.Dal?.DalAdi</td>
                <td>@item.Grup?.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 Sınıf Ekleme Sayfası (Create.cshtml)

Yeni bir sınıf eklemek için kullanılan sayfa:

@model SchoolManagement.Models.Sinif

@{
    ViewData["Title"] = "Yeni Sınıf Ekle";
}

<h2>Yeni Sınıf Ekle</h2>

<!-- Validation summary - Tüm form hatalarını buraya toplar -->
@Html.ValidationSummary(true, "", new { @class = "text-danger" })

<form asp-action="Create" method="post">
    <!-- SinifAdi: Sınıf Adı için giriş -->
    <div class="form-group">
        <label asp-for="SinifAdi"></label>
        <input asp-for="SinifAdi" class="form-control" required />
        @Html.ValidationMessageFor(model => model.SinifAdi, "", new { @class = "text-danger" }) <!-- SinifAdi için hata mesajı -->
    </div>

    <!-- AlanId: Alan seçimi -->
    <div class="form-group">
        <label asp-for="AlanId"></label>
        <select asp-for="AlanId" class="form-control" asp-items="@(ViewBag.Alan as SelectList)">
            <option value="">Seçiniz</option> <!-- Opsiyonel boş seçenek -->
        </select>
        @Html.ValidationMessageFor(model => model.AlanId, "", new { @class = "text-danger" }) <!-- AlanId için hata mesajı -->
    </div>

    <!-- DalId: Dal seçimi -->
    <div class="form-group">
        <label asp-for="DalId"></label>
        <select asp-for="DalId" class="form-control" asp-items="@(ViewBag.Dal as SelectList)">
            <option value="">Seçiniz</option> <!-- Opsiyonel boş seçenek -->
        </select>
        @Html.ValidationMessageFor(model => model.DalId, "", new { @class = "text-danger" }) <!-- DalId için hata mesajı -->
    </div>

    <!-- GrupId: Grup seçimi -->
    <div class="form-group">
        <label asp-for="GrupId"></label>
        <select asp-for="GrupId" class="form-control" asp-items="@(ViewBag.Grup as SelectList)">
            <option value="">Seçiniz</option> <!-- Opsiyonel boş seçenek -->
        </select>
        @Html.ValidationMessageFor(model => model.GrupId, "", new { @class = "text-danger" }) <!-- GrupId için hata mesajı -->
    </div>

    <!-- Submit butonu -->
    <button type="submit" class="btn btn-success mt-2">Kaydet</button>
</form>

<p>
    <!-- Geri dönme linki -->
    <a asp-action="Index">Geri Dön</a>
</p>

Var olan bir sınıfı düzenlemek için kullanılan sayfa:

@model SchoolManagement.Models.Sinif

@{
    ViewData["Title"] = "Sınıf Düzenle";
}

<h2>Sınıf Düzenle</h2>

<!-- Validation summary - Tüm form hatalarını buraya toplar -->
@Html.ValidationSummary(true, "", new { @class = "text-danger" })

<form asp-action="Edit" method="post">
    <!-- SinifAdi: Sınıf Adı için giriş -->
    <div class="form-group">
        <label asp-for="SinifAdi"></label>
        <input asp-for="SinifAdi" class="form-control" required />
        @Html.ValidationMessageFor(model => model.SinifAdi, "", new { @class = "text-danger" }) <!-- SinifAdi için hata mesajı -->
    </div>

    <!-- Alan: Alan seçimi -->
    <div class="form-group">
        <label for="AlanId">Alan</label> <!-- AlanId yerine Alan başlığını kullandık -->
        <select asp-for="AlanId" class="form-control" asp-items="@(ViewBag.Alan as SelectList)">
            <option value="">Seçiniz</option> <!-- Opsiyonel boş seçenek -->
        </select>
        @Html.ValidationMessageFor(model => model.AlanId, "", new { @class = "text-danger" }) <!-- AlanId için hata mesajı -->
    </div>

    <!-- Dal: Dal seçimi -->
    <div class="form-group">
        <label for="DalId">Dal</label> <!-- DalId yerine Dal başlığını kullandık -->
        <select asp-for="DalId" class="form-control" asp-items="@(ViewBag.Dal as SelectList)">
            <option value="">Seçiniz</option> <!-- Opsiyonel boş seçenek -->
        </select>
        @Html.ValidationMessageFor(model => model.DalId, "", new { @class = "text-danger" }) <!-- DalId için hata mesajı -->
    </div>

    <!-- Grup: Grup seçimi -->
    <div class="form-group">
        <label for="GrupId">Grup</label> <!-- GrupId yerine Grup başlığını kullandık -->
        <select asp-for="GrupId" class="form-control" asp-items="@(ViewBag.Grup as SelectList)">
            <option value="">Seçiniz</option> <!-- Opsiyonel boş seçenek -->
        </select>
        @Html.ValidationMessageFor(model => model.GrupId, "", new { @class = "text-danger" }) <!-- GrupId için hata mesajı -->
    </div>

    <!-- Submit butonu -->
    <button type="submit" class="btn btn-success mt-2">Kaydet</button>
</form>

<p>
    <!-- Geri dönme linki -->
    <a asp-action="Index">Geri Dön</a>
</p>

Sınıf Silme Sayfası (Delete.cshtml)

Bir sınıfı silmek için kullanılan sayfa:

@model SchoolManagement.Models.Sinif

@{
    ViewData["Title"] = "Sınıf Sil";
}

<h2>Sınıf Sil</h2>
<p>@Model.SinifAdi adlı sınıfı silmek istediğinizden emin misiniz?</p>

<form asp-action="Delete" method="post">
    <!-- Model'deki Id'yi gizli bir şekilde gönderiyoruz -->
    <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>

Etiketler
core mvc create edit delete views 
İlgili Makaleler
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem İkinci Yazılı Çalışma Soruları
2020 TYT Matematik Ortakatlı Kuralıyla İlgili Sorunun Çözümünü c# Diliyle Web Form Sayfasında Kodlama
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama1
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem Birinci Yazılı Çalışma Soruları
Visual Studio 2022 Programında Asp.Net Web Application Şablonu Görünmüyor Hatasını Düzeltme
Core Mvc Projesinde Tuple Nesneleri Post Etme ve Yakalama İşlemleri
Seri Port Yardımıyla Arduino Devresine Bağlanıp Ledleri Asp.Net Web Uygulamasından Yakıp Söndürme
Sitenin Alexa Dünya Sıralamasını Kodlarla Öğrenme
Personele Ait Boy ve Kilo Bilgilerine Göre İdeal Kiloyu Bulan Uygulamayı Asp.Net İle Yapınız
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama4
Bir Otobüs Firmasına Ait Bilet Satış İşlemlerini Class(Sınıf) Tanımlayarak Yapan c# Form Uygulaması
Asp.Net Uygulamasında Manual Olarak JSON Oluşturma
Asp.Net Uygulamalarında Modal PopUp Oluşturma
Web Uygulamalarında SqLite Kullanımı
Asp.Net Uygulamalarında DataList (Veri Listeleme) Kontrolü
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama2
C# Uygulamasında Miladi Takvimi Hicri Takvime, Hicri Takvimi Miladi Takvime Dönüştürme
2022 TYT Matematik Onbirinci Sorunun Çözümünü c# Diliyle Web Form Sayfasında Kodlama
RadioButton ile Cinsiyet Bilgisini Alan Asp.Net c# Uygulaması
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama3

Yorum Ekle
   
Kötü İyi