【问题标题】:Asp.Net mvc - pass last created id from action to partial viewAsp.Net mvc - 将最后创建的 id 从操作传递到部分视图
【发布时间】:2013-10-09 21:51:49
【问题描述】:

我有两张桌子。学生和年级。 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);
    }

我真的很感激举个例子。

谢谢!

【问题讨论】:

  • _AddGrades 部分视图的model 是什么?
  • 模型只是Grade
  • Grade 模型是什么样的?

标签: c# asp.net-mvc


【解决方案1】:

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

 TempData["StudentId"] = studentId;

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

 ViewData["StudentId"] = studentId;

【讨论】:

    【解决方案2】:

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

    int studentId = student.Id;
    

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

    【讨论】:

    • 是的,但是怎么做?例子?以及如何在下一个 partialView 中使用它?
    【解决方案3】:

    我认为你应该在你的控制器上添加一个 Get CreateGrade 动作并像这样返回一个 RedirectToAction:

    return RedirectToAction(MVC.Student.CreateGrade)
    

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

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

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

    【讨论】:

    • 我不想重定向到操作,因为我在填写一个表单并单击“创建”后使用 ajax 显示部分视图,部分视图显示如下,我需要该部分视图的 studentId。
    • 然后您需要创建一个新模型 (CreateGradeModel),其中将包含您的成绩信息和 StudentId
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多