2013-11-05 62 views
0

我有一個Razor視圖(ASP.NET MVC)與IQueryable的Razor視圖和IEnumerable

當我使用

@model IEnumerable<DAL.Models.Product> 

我可以通過調用作表頭:

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

但當我將IEnumerable更改爲IQueryable時,我必須指定一個像這樣的索引:

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

我必須指出模型的索引。爲什麼?

+0

我相信你的意思是說「我**可以讓表頭」而不是「不能」? – jingtao

回答

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)