使用实体框架在POST上出现错误-值不能为null。参数名称:source编辑-根据要求,这是视图...-开始编辑@modelsalesWebTest.viewModel.vwbooking@using(Html.BeginForm()){@Html.AntiForgeryToken()@Html.ValidationSummary(true)@HTML。HiddenFor(model=>model.bookings.bookingid)@Html.EditorFor(model=>model.bookings.name)@foreach(variteminModel.traces){@Html.EditorFor(m=>item.contact_Name)}}--编辑--start原始问题我有一个包含两个类的viewModel...publicclassvwbooking{publicbookingbookings{get;放;}publicIEnumerabletraces{get;放;预订和跟踪是edmx中的实体。我想通过一次调用更新两个类中的数据。这是我试过的...db.Entry(vwbooking.bookings).State=EntityState.Modified;vwbooking.traces.ToList().ForEach(//这里发生错误t=>{db.traces.Attach(t);db.Entry(t).State=EntityState.Modified;});db.SaveChanges();如果我删除跟踪部分,预订部分会正确更新。这是GET方法...publicActionResultEdit(intid=0){bookingbooking=db.bookings.Find(id);varviewModel=newvwbooking();viewModel.bookings=预订;viewModel.traces=(fromlindb.traceswherel.bookingid==booking.bookingidselectl);返回视图(视图模型);这是我的数据库上下文类publicclasssalesContext:DbContext{publicsalesContext():base(){Configuration.LazyLoadingEnabled=true;}publicsalesContext(stringConnection):base(Connection){Configuration.LazyLoadingEnabled=true;}publicDbSetbookings{get;放;}publicDbSettraces{get;放;}protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){基础。OnModelCreating(模型构建器);modelBuilder.Entity().HasKey(e=>e.bookingid);modelBuilder.Entity().HasKey(e=>e.traceid);问题似乎出在编辑器的设置方式上。我认为这导致模型在提交时未正确绑定@Html.EditorFor(m=>item.contact_Name)如果您要检查此助手生成的元素的名称属性,您很可能会看到它读取这些您甚至可以说name="contact_Name"。这是框架的一个严重缺点,解决方法通常是制作一个完整的自定义帮助程序或使用前端解决方案来修复名称。名称必须与模型完全匹配。你的价值观应该是什么等等。所以我建议找到一种方法来确保为你当前的项目正确设置这些名称。在调用它之前,您不检查vwbooking.traces==null。虽然您可能期望.ToList()可以保护您免受此影响,但EntityFramework可能很古怪(轶事)。如果(ModelState.IsValid){db.bookings.Attach(vwbooking.bookings);保护您的通话db.Entry(vwbooking.bookings).State=EntityState.Modified;if(vwbooking.traces!=null){vwbooking.traces.ToList().ForEach(//这里发生错误t=>{db.traces.Attach(t);db.Entry(t).State=EntityState。修改的;});db.SaveChanges();你会没事的以上是C#学习教程:GettingErroronPOSTwithEntityFramework-Valuecannotbenull。参数名称:来源分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
