asp.net-mvc – System.Web.MVC.UpdateModel可以更新EF导航属性
发布时间:2020-12-16 06:51:47 所属栏目:asp.Net 来源:网络整理
导读:如果我的数据库中有2个表:Foo和bar. Foo由FooId标识,Bar是BarId的标识符.一个Bar可以有0到多个Foos,因此Foo有BarId作为外键. 我有一个代表这个的模型和一个可用于编辑Foo并从关联栏中选择(从下拉列表中)的视图. 在控制器上给出以下方法: [AcceptVerbs(Http
如果我的数据库中有2个表:Foo和bar. Foo由FooId标识,Bar是BarId的标识符.一个Bar可以有0到多个Foos,因此Foo有BarId作为外键.
我有一个代表这个的模型和一个可用于编辑Foo并从关联栏中选择(从下拉列表中)的视图. 在控制器上给出以下方法: [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(int id,FormCollection formCollection) { Foo originalFoo = FooById(id); if (!ModelState.IsValid) { return View(new VenueViewModel(originalVenue,_db.GetCounties(),_db.VenueTypeSet)); } UpdateModel(originalFoo); /* Instead of using UpdateModel I could just iterate through formCollection and manually update originalFoo,it would work but surely there is a better way? */ _db.SaveChanges(); return RedirectToAction("Index"); } 对UpdateModel的调用抛出InvalidOperationException而没有InnerException: The model of type 'TestApplication.Models.Foo' was not successfully updated. 我的控制器从我视图中的下拉列表更新基于实体框架的模型的正确方法是什么? 解决方法
不,默认模型绑定器无法执行此操作.你也很难写一个自定义模型绑定器来做到这一点. HTML SELECT元素仅在描述中存储ID值,不足以实现大多数实体实例.所以我们只需要处理这样一个事实,即我们将只获取一个ID,这不足以实现一个实体而不会访问数据库.
因此,在更新实体的导航属性时,我们有两个选择: >从数据库中读取实体并将其分配给控制器中的导航属性. 后者就是我所做的.您可以在自定义模型绑定器或控制器中执行此操作.您可以阅读更多关于在链接上执行此操作的内容,并且在该链接的注释中有一些示例代码. 即将推出的.NET 4.0中新版本的Entity Framework将有一个名为“FK Associations”的新功能,这将使这一过程变得相当容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – Repeater.Items上的DataItem始终为null
- asp.net – 创建一个工作线程,并在整个应用程序生命周期内保
- asp.net-mvc-3 – 将模型数据从Knockout发送回MVC 3
- asp.net – 如何为.Net网站,Windows服务等创建安装程序?
- 如何阻止IIS 8停止空闲的ASP.NET应用程序?
- asp.net – viewStateEncryptionMode =“始终”不加密
- asp.net – 什么放在会话变量中
- JavaScript即时判断输入密码的强度
- asp.net – 将href绑定到Code Behind属性
- asp.net – Mono和IHttpHandler
推荐文章
站长推荐
- asp.net-mvc – 使用UIHint的ASP.NET MVC 3自定义
- asp.net-mvc – MVC 5没有将名为“action”的参数
- ASP.NET——验证控件
- asp.net – CSS中的内联样式与样式
- 集成EntLib实现ASP.NET MVC的异常处理
- asp.net – 404处理程序获取“句柄未初始化”异常
- asp.net-mvc – 如何创建文件并通过ASP.NET MVC中
- asp.net-mvc – 可从全局路由访问的ASP.NET MVC3
- asp.net-mvc – AppHarbor的反向代理导致SSL和ap
- asp.net-mvc – ASP.Net MVC 5 w /身份2.2.0注销
热点阅读