Asp.Net mvc - 将最后创建的 id 从操作传递到部分视图

Posted

技术标签:

【中文标题】Asp.Net mvc - 将最后创建的 id 从操作传递到部分视图【英文标题】:Asp.Net mvc - pass last created id from action to partial view 【发布时间】: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 模型是什么样的? 【参考方案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

以上是关于Asp.Net mvc - 将最后创建的 id 从操作传递到部分视图的主要内容,如果未能解决你的问题,请参考以下文章

如何创建具有所需验证的 ASP.Net MVC DropDownList

Asp.Net MVC 从模型创建视图脚手架不生成 int 属性

在 2 个控制器 ASP.NET Core 3.1 MVC 之间传递 ID

如何将数据从表示层传递到业​​务逻辑层? (ASP.NET MVC 5)

如何从 ASP.NET MVC 中的枚举创建下拉列表? [复制]

ASP .Net MVC,复选框问题!