我使用Entities Framework在ASP.NET MVC中实现我的数据accsee层。我在View中遇到了问题。
当我在VIEW中的代码时:
我在运行时遇到错误:
对象引用未设置为对象的实例。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例。
来源错误:
第14行:
第15行:<%= Model.FirstName%> 第16行:
第17行:
这是从强类型视图模板生成的。 我确保我在web.config中添加了模型引用 我在使用LINQ to SQL
时没有遇到此错误任何帮助?
答案 0 :(得分:2)
由于我无法对答案发表评论,我将通过新答案进行评论。 我注意到你的属性被称为“FirstName”,你是否有机会尝试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:ObjectStateManager不包含ObjectStateEntry,其中引用了“ContactManager.Models.Contact”类型的对象。
at System.Data.Objects.ObjectContext.ApplyPropertyChanges(String entitySetName,Object changed)
在ContactManager.Controllers.HomeController.Edit(联系contactToEdit)C:\ Users \ Jeroen \ Desktop \ ContactManager \ ContactManager \ ContactManager \ Controllers \ HomeController.cs:第65行}
当我在ApplyPropertyChanges:
之前添加此行时System.Data.Objects.ObjectStateEntry x = base._entities.ObjectStateManager.GetObjectStateEntry(originalContact);
x确实包含正确类型的条目。 (debug image)
注意:我偏离了教程并将实体对象放在超类中,因此我不必在所有控制器中声明相同的对象。但是在学习本教程时会出现同样的问题。
答案 1 :(得分:1)
我明白了! 问题出在VIEW中 通常,它会是, 使用(Html.BeginForm(new {Id = Model.Id}))
如果数据库中的主键是CategoryID,您会认为应该将代码调整为
Id = Model.CategoryID
但实际上,你应该这样做,
使用(Html.BeginForm(new {CategoryID = Model.CategoryID}))
否则,它不会填充模型。
复活,希望它有所帮助!
答案 2 :(得分:0)
看起来您的模型未在控制器中正确填充。你的问题中没有足够的信息可以弄清楚到底出了什么问题。
答案 3 :(得分:0)
有时模型为空,因为带有方法.FirstOrDefault()
的select语句没有带来有效对象。
您可以随时将.FirstOrDefault()
更改为.First()
并重新编译解决方案。