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)