You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Session获取异常致考试结束数据无法插入数据库问题排查

问题:ASP.NET MVC中Session["std_id"]转换后为0,导致无法插入考试成绩数据

在ASP.NET MVC项目中,登录验证通过后设置了Session["std_id"],但执行EndExam方法结束考试时,尽管Session["std_id"]不为空,转换后的studentId值却为0,导致无法将考试成绩等数据插入数据库。

登录代码片段

[HttpPost]
public ActionResult slogin(student s)
{
    student sv = db.students.Where(x => x.std_name == s.std_name && x.std_password == s.std_password).SingleOrDefault();

    if (sv == null)
    {
        ViewBag.Message = "Invalid User Name or Password!";
    }
    else
    {
        Session["std_id"] = s.std_id;
        return RedirectToAction("ExamDashboard");
    }

    return View();
}

EndExam代码片段

public ActionResult EndExam(tbl_questions q)
{
    try
    {
        if (Session["std_id"] == null)
        {
            return RedirectToAction("slogin");
        }

        int studentId = Convert.ToInt32(Session["std_id"]);
        int score = Convert.ToInt32(TempData["score"]);
        int examId = Convert.ToInt32(TempData["examid"]);

        Debug.WriteLine("Student ID: " + studentId);

        if (studentId <= 0 || score < 0 || examId <= 0)
        {
            ViewBag.ErrorMessage = "Error: Invalid data for exam creation.";
            return View();
        }

        tbl_setExam exam = new tbl_setExam();
        exam.exam_date = DateTime.Now;
        exam.exam_fk_stud = studentId;
        exam.exam_name = "Sample Exam";
        exam.std_score = score;

        db.tbl_setExam.Add(exam);
        db.SaveChanges();

        ViewBag.Score = score;
        return View();
    }
    catch (Exception ex)
    {
        ViewBag.ErrorMessage = "Error: " + ex.Message;
        return View();
    }
}

问题原因

登录时错误地将传入参数s的std_id存入Session,而非数据库查询得到的sv的std_id。前端提交登录请求时,s.std_id通常是默认值0(用户登录不会输入自己的ID),导致Session中存储的是无效的0值,后续转换后studentId自然为0,无法通过数据校验完成插入操作。

修复方案

修改登录方法中的Session赋值代码,将存入Session的对象从s改为数据库查询返回的sv:

// 原错误代码
// Session["std_id"] = s.std_id;

// 修改后的正确代码
Session["std_id"] = sv.std_id;

这样Session中存储的就是数据库中真实存在的学生ID,后续EndExam方法转换后得到的studentId会是有效的正整数,就能正常完成考试成绩的插入操作。

内容的提问来源于stack exchange,提问作者Timir Bhingradiya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 07:16:17