因为我不能评论一个答案,我会通过一个新的答案做到这一点.. 我注意到你的属性被称为“名字”,你有没有尝试做this教程? 这是您遇到问题的编辑操作?
因为这与我和我的同班同学所面对的问题完全相同。 这是问题的更详细的解释:
这是控制器的动作:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(Contact contactToEdit) {
if (!ModelState.IsValid)
return View();
try {
var originalContact = (from c in base._entities.ContactSet
where c.Id == contactToEdit.Id
select c).First();
base._entities.ApplyPropertyChanges(originalContact.EntityKey.EntitySetName, contactToEdit);
base._entities.SaveChanges();
return RedirectToAction("Index");
} catch(Exception e) {
return View();
}
}
当ApplyPropertyChanges被称为exception提高。 (InvalidOperationException异常) 异常消息:
{System.InvalidOperationException: The ObjectStateManager does not contain an ObjectStateEntry with a reference to an object of type 'ContactManager.Models.Contact'.
at System.Data.Objects.ObjectContext.ApplyPropertyChanges(String entitySetName, Object changed)
at ContactManager.Controllers.HomeController.Edit(Contact contactToEdit) in C:\Users\Jeroen\Desktop\ContactManager\ContactManager\ContactManager\Controllers\HomeController.cs:line 65}
当添加ApplyPropertyChanges之前这一行:
System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact);
X确实含有正确类型的一个条目。 (debug image)
注:我做了一个从教程的小偏差,并把实体对象放在一个超类,所以我不必在我所有的控制器中声明相同的对象。但遵循教程时会出现同样的问题。
这就是我发现的奇怪。我无法提供更多信息,因为我不能。我可以使用<%= Html.Encode(Model.FirstName)%>但不是 <%= Model.FirstName%> – Smallville 2009-04-29 13:04:17