Asp.Net MVC - 将上次创建的 ID 从操作传递到部分视图

本文关键字:操作 视图 ID MVC Net 创建 Asp | 更新日期: 2023-09-27 18:34:35

我有两个表。学生和年级。Grade有一个外键StudentId,所以我知道哪个学生得到了那个Grade。

我有一个操作 AddStudent,视图有一个表单,我将学生数据数据插入数据库。AddStudent 操作返回 PartView。在那个部分视图中,我有新的成绩表格。

我需要以某种方式获取学生ID(在AddStudent操作中插入数据后,我应该以某种方式获得(。如何将学生 ID 从添加学生操作传递到成绩部分视图?因为我需要在 StudentId 中插入"成绩",以便我知道哪些学生成绩是针对的。

行动:

        [HttpPost]
    [ValidateAntiForgeryToken]
    public virtual ActionResult CreateStudent(Student student)
    {
        if (ModelState.IsValid)
        {
            db.Students.Add(student);
            db.SaveChanges();
            return PartialView(MVC.Student.Views._AddGrades); // do I have to pass student.Id here to partialView somehow?
        }
        return View(student);
    }

等级作用:

        [HttpPost]
    [ValidateAntiForgeryToken]
    public virtual ActionResult CreateGrade(Grade grade, int studentId)
    {
        if (ModelState.IsValid)
        {
            grade.studentId = studentId; // how to get this from previous action to my partial view?
            db.Grades.Add(grade);
            db.SaveChanges();
            return PartialView(MVC.Grades.Views._UpdateTableOfGrades);
        }
        return View(grade);
    }

我真的很感谢一些例子。

谢谢!

Asp.Net MVC - 将上次创建的 ID 从操作传递到部分视图

有几种方法可以剥掉这只猫的皮,但我认为TempData就是你所追求的。因此,在您的第一个控制器中,您将拥有以下内容:

 TempData["StudentId"] = studentId;

TempData将持续到下一个请求结束。如果需要它保留更长时间,请使用 ViewData

 ViewData["StudentId"] = studentId;

调用 db.SaveChanges() 后将填充 Id 属性:

int studentId = student.Id;

可以将此值传递给分部视图。

我认为您应该在控制器上添加一个Get CreateGrade操作并返回如下所示的RedirectToAction:

return RedirectToAction(MVC.Student.CreateGrade)

还需要为将包含 StudentId 属性的创建创建创建模型。

如果您使用T4MVC,则可以这样做:

return RedirectToAction(MVC.Student.CreateGrade).AddRouteValue("studentid", student.Id);