2

我写在我的CSHTML文件下面的语句: -为什么懒加载在剃刀视图(cshtml文件)中不起作用?

@{ 
string categoryName = string.Format("{0}->{1}", label.Category.Parent.Name, 
label.Category.Name); 
@categoryName 
} 

,并得到一个异常Object reference null

另一方面,同样在Controller.cs文件和立即窗口中工作。我知道它与延迟加载有关。

背后有没有任何概念,它不适用于Cshtml文件中的表达式?

谢谢

回答

5

这是行不通的,因为您的上下文在您的代码执行时处置。所有数据都应该加载到您的视图中,以便关闭延迟加载并使用预先加载。在结果上调用.Single()来强制加载和使用:从context.Labels.Include中的o中获取(o => o.Parent),例如当时强制加载。您还可以将这些结果平铺到控制器中的视图模型中。

+0

但是,当我们将断点放入cshtml文件中,然后在即时窗口中执行此操作时,我们会得到结果。此时,控制器也执行完毕。为什么我们在这里得到结果呢? – teenup 2012-02-25 08:36:26

+2

不知道是否处于调试模式在这里与对象生命周期有所不同我不会想象它 - 但我知道这是MVC开始时的问题之一:)加载所有数据并将其传递给视图。这是一条应该始终遵循的规则,无论其他事情是否有效。控制器作业是编排所有数据以将其交给视图。 – 2012-02-25 16:45:24