我有一个Razor视图(ASP.NET MVC)
当我使用
时@model IEnumerable<DAL.Models.Product>
我可以通过调用来创建表头:
@Html.DisplayNameFor(model => model.Name)
但是当我将IEnumerable
更改为IQueryable
时,我必须指定一个这样的索引:
@Html.DisplayNameFor(model => model[0].Name)
我必须指出一个模型索引。为什么?
答案 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)