![](/img/trans.png)
[英]Passing a List through the controller into the IEnumerable view ASP.NET MVC 4
[英]Passing list to view in asp.net mvc
这是我的控制器动作方法。
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
,因此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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.