0

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

当我使用

@model IEnumerable<DAL.Models.Product> 

我可以通过调用来制作表头:

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

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

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

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

4

1 回答 1

1

这个答案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)
于 2013-11-05T07:38:29.303 回答