asp.net-mvc-3 – MVC3 – 如何将新创建的子对象链接到其父对象
我是MVC的完全新手,似乎无法理解一个非常基本的概念.
我有一个父对象,它包含一个子对象的集合.我想创建一个新的子对象,并将其链接到父对象,通过EF4保存在数据库中 public class Parent { public int Id { get; set; } public string Name { get; set; } public virtual List<Child> Children { get; set; } } 到目前为止,我的基本应用程序中发生了什么.我的用户转到显示父对象详细信息的页面,其中包含当前子项的列表.该页面上还有一个链接可添加新的孩子.该链接指向子控制器上的创建操作,传递父ID,父ID又显示视图以创建新子项.这就是我被困住的地方.我不知道如何持久保存提供的父ID,以便当我单击Save时,我可以检索该父对象并将我的新子对象添加到其集合中. 我可能完全以错误的方式接近这个,但我似乎找不到任何关于如何向父项添加新子项的基本教程,考虑到它的常见情况,这很奇怪. 任何帮助真的很感激! 非常感谢 [更新1] 我有两个CreateChild操作,最初由MVC生成,然后由我自己修改.我只能通过观察他们看到他们没有做我需要的东西,但我完全不确定他们需要改变的方式.具体来说,我将父ID存储在ViewBag中,但是在对Create操作的调用之间,它会丢失,因此在调用第二个Create以将新子项持久保存到数据库时不可用. public ActionResult Create(int parentId) { Parent parent = db.Parents.Find(parentId); ViewBag.ParentId = parent.Id; return View(); } [HttpPost] public ActionResult Create(Child child) { if (ModelState.IsValid) { Parent parent = db.Parents.Find(ViewBag.ParentId); parent.Children.Add(child); db.Children.Add(child); db.SaveChanges(); return RedirectToAction("Index"); } return View(child); } 再次感谢 解决方法
当您将ParentId传递给add子操作时,看起来您正在使用route参数执行此操作.
而不是将其存储在ViewBag中,将其写为子表单中的隐藏字段.然后,当有人提交表单时,ParentId将被提交给您的HttpPost操作方法. 您可以通过在Parent viewmodel上创建ParentId属性来实现此目的. public class Child { public int ParentId { get; set; } } public ActionResult Create(int parentId) { Parent parent = db.Parents.Find(parentId); var model = new Child { ParentId = parent.Id }; return View(model); } 在您的视图中,渲染如下: @Html.HiddenFor(m => m.ParentId) 然后,在你的HttpPost期间,Child将已经包含ParentId – 默认的模型绑定器将从表单上的隐藏字段中获取它. [HttpPost] public ActionResult Create(Child child) { if (ModelState.IsValid) { Parent parent = db.Parents.Find(child.ParentId); parent.Children.Add(child); db.Children.Add(child); // don't think you need this line db.SaveChanges(); return RedirectToAction("Index"); } return View(child); } 发布回答后更新 查看您的HttpPost代码,将子项添加到数据库两次可能不正确.如果您使用的是EF 4.1或4.2,我很确定这是不正确的,但我不确定以前的EF版本.将子项添加到parent.Children集合应该足够了 – 我认为您不应该将它添加到db.Children集合中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 每个文本框而不是每页asp.net ValidateRequest = false?
- asp.net-mvc – 元素’标题’出现次数太少,ASP.NET.MVC母版
- 新浪出输入法了,深蓝词库转换更新到1.3.1——增加对新浪拼
- ASP.NET中maxPageStateFieldLength的最佳值是多少?
- ASP.NET异步任务 – 如何使用Page.RegisterAsyncTask使用We
- ASP.NET MVC – Ajaxified RenderAction
- asp.net-mvc – 使用AutoMapper的控制器上的单元测试
- asp.net – 如何传递单选按钮值来过滤数据
- 使用ASP.NET卷曲请求
- asp.net – 从WebMethod访问函数背后的代码
- asp.net-mvc – MVCContrib,Html.Grid:如何将基
- asp.net-mvc – 如何设置AntiForgeryToken cooki
- asp.net-mvc – 在Razor视图中调用异步方法
- asp.net-mvc – 如何在MVC4中隐藏URL的参数
- asp.net-mvc – ASP.NET MVC Windows Azure组织身
- asp.net – 升级到TLS 1.2后无法生成Web服务引用
- asp.net – 静态文件上的间歇性401和302错误
- asp.net – (.NET Core 1.0 \u0026\u002
- asp.net 大文件上传 之 改版了的SlickUpload.Htt
- asp.net-mvc-3 – 不能使用NuGet PagedList ASP.