C# ASP.Net veri tabanına kayıt gelmiyor

avare44

Femtopat
Katılım
25 Ocak 2024
Mesajlar
4
Daha fazla  
Cinsiyet
Erkek
Sınav oluşturma sitesi yapıyorum. Sınavın konusunu veri tabanına kaydettikten sonra kullanıcıya seçtirtiriyorum. Kullanıcı bu konuya göre 4 soru her sorunun 4 şıkkı ve doğru cevabını belirleyeceği seçenekleri oluyor. İşlemleri yapıyorum kaydet butonuna basıyorum istediğim actiona yönlendiriyor fakat veri tabanına hiçbir kayıt gelmiyor.
 
Sınav oluşturma sitesi yapıyorum. Sınavın konusunu veri tabanına kaydettikten sonra kullanıcıya seçtirtiriyorum. Kullanıcı bu konuya göre 4 soru her sorunun 4 şıkkı ve doğru cevabını belirleyeceği seçenekleri oluyor. İşlemleri yapıyorum kaydet butonuna basıyorum istediğim actiona yönlendiriyor fakat veri tabanına hiçbir kayıt gelmiyor.
Entity framework kullanıyorsanız db.savechanges methodunu çağırmayı unuyor olabilirsiniz. Ya da transaction kullanıyorsanız commit etmiyorsunuzdur.
 
@delikarga kodları değiştirdim daha sade bir şekilde yazdım tek savechanges var bu sefer savechanges kayıt yaparken null hatası veriyor. null hatası veren descriptionuda zaten veri tabanından çekiyorum tekrar başka yere kaydediyorum ne yapacağımı bilemedim
SqlException: Cannot insert the value NULL into column 'sinavDescription', table 'sinavSitesi.dbo.sinavs'; column does not allow nulls. INSERT fails.

[HttpGet]
public IActionResult Index(string title)
{
var rssItem = _projeDbContext.rssItems.SingleOrDefault(item => item.Title == title);
if (rssItem != null)
{
ViewBag.Title = rssItem.Title;
ViewBag.Description = rssItem.Description;
}
return View();
}

[HttpPost]
public IActionResult Create(Sinav sinav)
{
Sinav exam = new Sinav
{
Title = sinav.Title,
Description = sinav.Description,
Sorular = new List<Soru>()
};

foreach (var item in sinav.Sorular.ToList())
{
Soru soru = new Soru
{
soruMetni = item.soruMetni,
secenekA = item.secenekA,
secenekB = item.secenekB,
secenekC = item.secenekC,
secenekD = item.secenekD,
dogruCevap = item.dogruCevap,
//SinavId = exam.Id

};
exam.Sorular.Add(soru);
}
_projeDbContext.sinavs.Add(exam);
_projeDbContext.SaveChanges(); <----- hata aldığım satr

return RedirectToAction("Index", "Home");
}
 
Merhaba bir şey daha soracağım. Şimdi sınavı oluşturuyorum kaydediyorum listeleyip kullanıcıya seçtiriyorum kullanıcı sınavı çözüyor ve bitiriyor. Sınav bittiğinde sayfa yenilenmeden kullanıcının doğru cevaplarını yeşil renge yanlış cevapların ise kırmızı renge boyayarak göstermek istiyorum fakat 2 farklı model sınıfı kullanıyorum bu yüzden null hatası alıyorum ne yapacağımı bilemedim.


C#:
using Microsoft.AspNetCore.Mvc;
using SinavOlusturma.DataLayer;
using SinavOlusturma.Models;

namespace SinavOlusturma.Controllers
{
    public class SinavCozController : Controller
    {
        private readonly ProjeDbContext _projeDbContext;

        public SinavCozController(ProjeDbContext projeDbContext)
        {
            _projeDbContext = projeDbContext;
        }

        [HttpGet]
        public IActionResult SinavCoz(int? id)
        {
            var sinavs = _projeDbContext.sinavs
                .Where(s => s.Id == id)
                .Select(s => new Sinav
                {
                    Baslik = s.Baslik,
                    Aciklama = s.Aciklama,
                    Sorular = _projeDbContext.sorus
                                .Where(soru => soru.SinavId == id)
                                .Select(soru => new Soru
                                {
                                    soruMetni = soru.soruMetni,
                                    secenekA = soru.secenekA,
                                    secenekB = soru.secenekB,
                                    secenekC = soru.secenekC,
                                    secenekD = soru.secenekD,
                                    dogruCevap = soru.dogruCevap
                                }).ToList()
                })
                .ToList();
            return View(sinavs);
        }

        [HttpPost]
        public IActionResult SinavTamamla(List<Soru> sorular)
        {
            var sinavSonucu = new List<Soru>();
            foreach (var soru in sorular)
            {
                var sonuc = new Soru
                {
                    Id = soru.Id,
                    soruMetni = soru.soruMetni,
                    dogruCevap = soru.dogruCevap,
                    kullaniciCevabi = HttpContext.Request.Form[$"soru_{soru.Id}_dogruCevap"].ToString()
                };
                sinavSonucu.Add(sonuc);
            }
            ViewBag.SinavSonucu = sinavSonucu;
            return View(sinavSonucu);
        }
    }
}

HTML:
@model List<Sinav>

@{
    int count = 1;
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.1/normalize.min.css">
    <title>Sınav Sayfası</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f4;
            padding: 50px;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100%;
            width: 100%;
            max-width: 900px;
            margin: 0 auto;
        }

        .content-container {
            background-color: #fff;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
            width: 800px;
            padding: 20px;
            text-align: left;
        }

        input[type="text"],
        textarea {
            width: calc(100% - 16px);
            padding: 8px;
            margin-bottom: 10px;
            box-sizing: border-box;
            border: 1px solid black;
        }

        .button {
            background-color: green;
            color: #fff;
            padding: 15px;
            border: none;
            border-radius: 4px;
            cursor: pointer;
            margin-top: 20px;
            margin-left: 220px;
            width: 250px;
        }

            .button:hover {
                background-color: limegreen;
            }
    </style>
</head>
<body>
    @foreach (var sinav in Model)
    {
        <form method="post" action="/SinavCoz/SinavTamamla">
            <div class="content-container">
                <h4>Yazı</h4>

                <label style="font-weight: bold;" for="Baslik">Başlık</label>
                <textarea rows="1" cols="50" name="Baslik" readonly>@sinav.Baslik</textarea>

                <label style="font-weight: bold;" for="Aciklama">Açıklama</label>
                <textarea rows="5" cols="50" name="Aciklama" readonly>@sinav.Aciklama</textarea>

                <br>
                <br>
                <h1 style="font-weight: bold;">Sorular</h1>
                @foreach (var soru in sinav.Sorular)
                {
                    <div>
                        <input type="text" name="soruMetni" value="Soru @count) @soru.soruMetni" readonly>
                        <br>

                        <label>
                            <input type="radio" name="soru@(count)_dogruCevap" value="A">
                            A
                        </label>
                        <input type="text" style="width: 713px" name="soru@(count)[email protected]" value="A) @soru.secenekA" readonly>

                        <label>
                            <input type="radio" name="soru@(count)_dogruCevap" value="B">
                            B
                        </label>
                        <input type="text" style="width: 713px" name="soru@(count)[email protected]" value="B) @soru.secenekB" readonly>

                        <label>
                            <input type="radio" name="soru@(count)_dogruCevap" value="C">
                            C
                        </label>
                        <input type="text" style="width: 713px" name="soru@(count)[email protected]" value="C) @soru.secenekC" readonly>

                        <label>
                            <input type="radio" name="soru@(count)_dogruCevap" value="D">
                            D
                        </label>
                        <input type="text" style="width: 713px" name="soru@(count)[email protected]" value="D) @soru.secenekD" readonly>

                        <br>
                        <br>
                    </div>
                    count++;
                }
                <button type="submit" class="button">Sınavı Tamamla</button>
            </div>
        </form>
    }
    <script>
        window.onload = function () {
            var sinavSonucu = @Html.Raw(Json.Serialize(ViewBag.SinavSonucu));

            if (sinavSonucu && sinavSonucu.length > 0) {
            } else {
                console.log('Sinav sonucu bulunamadi veya bos.');
            }

            sinavSonucu.forEach(function (soru) {
                var soruId = soru.Id;
                var dogruCevap = soru.dogruCevap;
                var kullaniciCevabi = soru.kullaniciCevabi;

                var dogruCevapElement = document.querySelector('input[name="soru_' + soruId + '_dogruCevap"][value="' + dogruCevap + '"]');

                var kullaniciCevabiElement = document.querySelector('input[name="soru_' + soruId + '_dogruCevap"][value="' + kullaniciCevabi + '"]');

                if (kullaniciCevabi === dogruCevap) {
                    dogruCevapElement.parentElement.style.backgroundColor = 'lightgreen';
                } else {
                    kullaniciCevabiElement.parentElement.style.backgroundColor = 'lightcoral';
                }
            });
        };
    </script>
</body>
</html>
 

Yeni konular

Geri
Yukarı