将列表传递给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 ?IEnumerableList的超类吗?

将列表传递给asp.net mvc中的视图

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>