0

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

我有一个动作 AddStudent 并且视图有一个表单,我在其中将学生数据数据插入数据库。AddStudent 操作返回 PartialView。在那个 PartialView 中,我有新的成绩表。

我需要以某种方式获取 StudentId(在 AddStudent 操作中插入数据后我应该以某种方式获取)。如何将 StudentId 从 AddStudent 操作传递到 Grades 部分视图?因为我需要用 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);
    }

我真的很感激举个例子。

谢谢!

4

3 回答 3

0

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

return RedirectToAction(MVC.Student.CreateGrade)

您还需要为包含 StudentId 属性的创建创建一个模型。

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

return RedirectToAction(MVC.Student.CreateGrade).AddRouteValue("studentid", student.Id);
于 2013-10-09T22:06:40.153 回答
0

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

 TempData["StudentId"] = studentId;

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

 ViewData["StudentId"] = studentId;
于 2013-10-09T21:56:20.020 回答
0

您致电后,该Id物业将被填满db.SaveChanges()

int studentId = student.Id;

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

于 2013-10-09T21:56:23.120 回答