
如果我调试和查看ModelState错误,我得到一个说法:
“EntityCollection已经被初始化了,只有调用InitializeRelatedCollection方法才能在反序列化对象图时初始化一个新的EntityCollection”.
另外,在调试时,我可以看到投诉模型由投诉人填写,因此似乎部分正在运作.
我不知道我在做什么是不可能使用默认的ModelBinder,或者如果我不是正确的方式.我似乎没有找到任何具体的例子或文件.在stackoverflow here中可以找到一个非常类似的问题,但它似乎不处理强类型的视图.
控制器代码:
public ActionResult Edit(int ID) { var complaint = (from c in _entitIEs.ComplaintSet.Include("Complainants") where c.ID == ID select c).FirstOrDefault(); return VIEw(complaint); } // // POST: /Home/Edit/5 [AcceptVerbs(httpVerbs.Post)] public ActionResult Edit(Complaint complaint) { if (!ModelState.IsValID) { return VIEw(); } try { var originalComplaint = (from c in _entitIEs.ComplaintSet.Include("Complainants") where c.ID == complaint.ID select c).FirstOrDefault(); _entitIEs.ApplyPropertyChanges(originalComplaint.EntityKey.EntitySetname,complaint); _entitIEs.SaveChanges(); return RedirectToAction("Index"); } catch { return VIEw(); } } 查看代码(这是由创建/编辑视图调用的部分视图,这也是强制类型的投诉):
<%@ Control Language="C#" inherits="System.Web.Mvc.VIEwUserControl<ProStand.Models.Complaint>" %><%= HTML.ValIDationSummary() %><% using (HTML.BeginForm()) {%><table cellpadding="0" cellspacing="0" > <tr> <td> <label for="DateReceived">Date Received:</label> <%= HTML.TextBox("DateReceived") %> <%= HTML.ValIDationMessage("DateReceived","*") %> </td> <td> <label for="DateEntered">Date Entered:</label> <%= HTML.TextBox("DateEntered")%> <%= HTML.ValIDationMessage("DateEntered","*") %> </td> </tr> <tr> <td> <label for="Concluded">Concluded:</label> <%= HTML.CheckBox("Concluded")%> <%= HTML.ValIDationMessage("Concluded","*") %> </td> <td> <label for="IncIDentDate">IncIDent Date:</label> <%= HTML.TextBox("IncIDentDate")%> <%= HTML.ValIDationMessage("IncIDentDate","*") %></td> </tr></table> <hr /> <table> <% if (Model != null) { int i = 0; foreach (var complainant in Model.Complainants){ %> <%= HTML.HIDden("Complainants[" + i + "].ID",complainant.ID)%> <tr> <td> <label for="Surname">Surname:</label> <%= HTML.TextBox("Complainants[" + i + "].Surname",complainant.Surname)%> <%= HTML.ValIDationMessage("Surname","*")%> </td> <td> <label for="Givenname1">Givenname1:</label> <%= HTML.TextBox("Complainants[" + i + "].Givenname1",complainant.Givenname1)%> <%= HTML.ValIDationMessage("Givenname1","*")%> </td> </tr> <% i++; %> <% }} %> <tr> <td colspan=2> <input type="submit" value="submit" /> </td> </tr></table><% } %><div> <%=HTML.Actionlink("Back to List","Index") %></div>解决方法 盲目猜测: 更改:
<%= HTML.TextBox("Complainants[" + i + "].Surname",complainant.Surname)%> 有:
<%= HTML.TextBox("Complaint.Complainants[" + i + "].Surname",complainant.Surname)%> 分别 – 添加“投诉”.之前“投诉人[…]
编辑:
这不是一个正确的答案.留下它取消删除只是因为这可能会添加一些值,直到正确的答案d出.
EDIT2:
我可能是错的,但对我来说,实体框架似乎有问题(或者你使用它的方式).我的意思是 – asp.net mvc设法从请求中读取值,但无法初始化投诉人集合.
Here写的:
The InitializeRelatedCollection(TTargetEntity) method initializes an existing EntityCollection(TEntity) that was created by using the default constructor. The EntityCollection(TEntity) is initialized by using the provIDed relationship and target role names.
The InitializeRelatedCollection(TTargetEntity) method is used during deserialization only.
更多信息:
Exception:
InvalIDOperationExceptionConditions:
When the provIDed EntityCollection(TEntity) is already initialized. When the relationship manager is already attached to an ObjectContext. When the relationship manager already contains a relationship with this name and target role.
发生两次初始化重定义选项.不幸的是,我没有明确的想法为什么.也许这个小调查将有助于别人 – 更有经验的EF. 总结
以上是内存溢出为你收集整理的c# – 强力类型视图中多个模型表单提交的模型绑定全部内容,希望文章能够帮你解决c# – 强力类型视图中多个模型表单提交的模型绑定所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)