2010-08-27 55 views
1

我正在使用NerdDinner的模式。我在我的测试方法中调用Index(),并且我返回的ViewREsult没有数据。所以变量数据结束为空。ViewResult返回无数据

但是,我知道那里有数据。因为我可以去观察窗口并展开变量结果并展开viewData-> Model-> ResultsView然后我会看到“将会展开结果视图将列举IEnumerable”当我展开它时,数据就存在。

任何想法为什么数据会返回为空,除非我展开?

感谢 雅

[TestMethod] 
    public void Index__Should_Return_1_or_More_lessons() 
    { 
     var controller = new LessonController(new FakeLessonRepository()); 

     var result = controller.Index() as ViewResult; 

     var data = result.ViewData.Model as IList<Lesson>; 
     Assert.IsTrue(data.Count > 0); 
    } 

回答

1

这是因为在LINQ的或EF Lazy Loading(取决于你使用的)需要时查询才会执行。你可以通过调用ToList()或ToArray()等类似的终结器来强制执行它。

+0

嗯不知道如何到ViewResult的ToArray或ToList方法...任何想法? – Jas 2010-08-27 14:39:14

+0

'var data =((IList )result.ViewData.Model).ToList();'应该可以正常工作 – Buildstarted 2010-08-27 14:48:20

+0

谢谢! var data =((EnumerableQuery )result.ViewData.Model).ToList(); 做到了。 – Jas 2010-08-27 21:14:52