具有IQueryable和IEnumerable的Razor视图

时间:2013-11-05 07:26:08

标签: indexing

我有一个Razor视图(ASP.NET MVC)

当我使用

@model IEnumerable<DAL.Models.Product> 

我可以通过调用来创建表头:

@Html.DisplayNameFor(model => model.Name)

但是当我将IEnumerable更改为IQueryable时,我必须指定一个这样的索引:

@Html.DisplayNameFor(model => model[0].Name)

我必须指出一个模型索引。为什么?

1 个答案:

答案 0 :(得分:1)

这个答案https://stackoverflow.com/a/14392427/1366901说:

  

@html.DisplayNameFor IS特别之处在于它有一个重载   IEnumerable模型。它知道你真的只是在显示名称之后   对于属性,因为你有一个强类型列表,它知道如何   找到显示名称。这是一个方便的功能!

有两种方法可以解决它 - 在IQueryable上调用ToList()使其成为控制器中的IEnumerable:

// in your controller, change the return statement to
return resultsQuery.ToList();

或者,您可以使用FirstOrDefault(),而不是指定索引,如果您的IQueryable具有零元素,它仍然可以工作:

@Html.DisplayNameFor(model => model.FirstOrDefault().Name)