我有一个简单的剃刀观点:
<script>var fieldList = @Html.Raw(Json.Encode(Model));</script>
此行抛出The ObjectContext instance has been disposed
异常。如果我删除它,即使我稍后在View中使用Model
,一切正常。
foreach (SomeCustomObject pField in Model)
{
<div>
@pField.SomeProperty
</div>
}
控制器操作
ActionResult SomeAction()
{
List<SomeCustomObject> tList = new List<SomeCustomObject>();
using(EFEntities db = new EFEntities())
{
tList = db.SomeCustomObject.ToList();
}
return View(tList);
}
我认为,可能是因为对象具有不再有效的导航属性。是否可以告诉Json.Encode
仅使用对象的非导航属性?
答案 0 :(得分:1)
您无法对加载它的using
块之外的模型对象进行操作。可能JSON.encode
对模型对象进行深度反射分析,因此触及一些与上下文相关的属性。
因此,在常见情况下,您应该在控制器/操作方法中将模型转换为JSON,在using
块中,将其转换为字符串变量然后在模板中使用此变量。
答案 1 :(得分:0)
我想出的最简单的方法是:
答案 2 :(得分:0)
首先使用 context.Configuration.LazyLoadingEnabled = false;
在上下文中禁用延迟加载,然后再开始从数据库中提取内容。
using (var context = new SomeEntityContext())
{
context.Configuration.LazyLoadingEnabled = false; // This is the fixer.
return context.SomeEntitiesWithRelations.ToList();
}