我有一个 Razor 视图 (ASP.NET MVC)
当我使用
@model IEnumerable<DAL.Models.Product>
我可以通过调用来制作表头:
@Html.DisplayNameFor(model => model.Name)
但是当我更改IEnumerable为时IQueryable,我必须指定这样的索引:
@Html.DisplayNameFor(model => model[0].Name)
我必须指出模型的索引。为什么?
我有一个 Razor 视图 (ASP.NET MVC)
当我使用
@model IEnumerable<DAL.Models.Product>
我可以通过调用来制作表头:
@Html.DisplayNameFor(model => model.Name)
但是当我更改IEnumerable为时IQueryable,我必须指定这样的索引:
@Html.DisplayNameFor(model => model[0].Name)
我必须指出模型的索引。为什么?
这个答案https://stackoverflow.com/a/14392427/1366901说:
@html.DisplayNameFor 的特殊之处在于它对 IEnumerable 模型具有重载。它知道您实际上只是在属性的显示名称之后,并且由于您有一个强类型列表,它知道如何找到显示名称。这是一个方便的功能!
有两种方法可以绕过它 - 在 IQueryable 上调用 ToList() 以使其成为控制器中的 IEnumerable:
// in your controller, change the return statement to
return resultsQuery.ToList();
或者,您可以使用 FirstOrDefault() 而不是指定索引,如果您的 IQueryable 有零个元素,它仍然可以工作:
@Html.DisplayNameFor(model => model.FirstOrDefault().Name)