将列表传递给asp.net mvc中的视图
本文关键字:mvc 视图 net asp 列表 | 更新日期: 2023-09-27 18:06:58
这是我从控制器的动作方法。
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
的超类吗?
List<T>
实现IEnumerable<T>
接口:
http://msdn.microsoft.com/en-us/library/6sh2ey19 (v = vs.110) . aspx
在可能的情况下尝试使用接口以保持代码解耦是典型的最佳实践,所以这就是为什么View
是这样搭建的。在这种情况下,您可以将实现IEnumerable<T>
的任何其他Movie
集合传递给View
,并且您的View
将愉快地呈现而没有问题。
那么,假设你在另一个Controller
中有另一个Action
,比如:
public ActionResult Index()
{
Queue<Movie> movies = new Queue<Movie>();
movies.Enqueue(db.Movies.Single(m => m.Title == "Flash Gordon"));
movies.Enqueue(db.Movies.Single(m => m.Title == "Star Wars"));
return View( "Movie/Index", movies );
}
因为Queue<T>
实现了IEnumberable<T>
,所以movies
将由相同的View
呈现,而无需对其进行任何更改。如果您的View
输入到List<Movies>
,您将需要创建一个完整的单独的View
来容纳您的Queue<Movies>
模型!
正如Chris所提到的,List<T>
实现了IEnumerable<T>
,所以这就是为什么View的模型是有效的:
@model IEnumerable<MVCWebApplication2.Models.Movie>
既然你说你想把它用作List
,列表也实现了IList<T>
,它应该为你提供你期望在视图中拥有的功能。
你可以像这样使用List方法:
@model IList<MVCWebApplication2.Models.Movie>
<div>
First movie: @Model.First().Name
</div>
@Model.Count Action Movies:
<ul>
@foreach (var item in Model.Where(x => x.Type = "ActionMovie"))
{
<li>@item.Name - @item.Description</li>
}
</ul>