下面是我的操作方法从控制器。
public class MoviesController : Controller
{
private MovieDBContext db = new MovieDBContext();
// GET: /Movies/
public ActionResult Index()
{
return View( db.Movies.ToList() );
}
}
字符串
可以看到,List
被传递给View
,这就是为什么我希望在view
中将其作为List
使用,而在View
中将其作为IEnumerable
使用
下面是View
的第一行
@model IEnumerable<MVCWebApplication2.Models.Movie>
型
为什么传入的值List
的行为与IEnumerable
相同?IEnumerable
是List
的超类吗?
2条答案
按热度按时间mwyxok5s1#
List<T>
实现IEnumerable<T>
接口:http://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx
通常最好的做法是尽可能地使用接口来保持代码的解耦,这就是为什么
View
是这样搭建的。在这种情况下,您可以将任何其他实现IEnumerable<T>
的Movie
集合传递给View
,并且View
将很高兴地呈现而不会出现问题。所以,假设你有另一个
Action
在另一个Controller
中,比如:字符串
因为
Queue<T>
实现了IEnumerable<T>
,所以movies
将由相同的View
渲染,而无需对其进行任何更改。如果您的View
被键入为List<Movies>
,则需要创建一个完整的单独的View
来容纳您的Queue<Movies>
模型!pjngdqdw2#
正如Chris提到的,
List<T>
实现了IEnumerable<T>
,这就是为什么View的模型是有效的:字符串
既然你说你想把它用作
List
,List也实现了IList<T>
,这应该为你提供了你期望在视图中拥有的功能。你可以像这样使用List方法:
型