在asp.net mvc中查看传递列表

3j86kqsm  于 5个月前  发布在  .NET
关注(0)|答案(2)|浏览(71)

下面是我的操作方法从控制器。

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的超类吗?

mwyxok5s

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中,比如:

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>实现了IEnumerable<T>,所以movies将由相同的View渲染,而无需对其进行任何更改。如果您的View被键入为List<Movies>,则需要创建一个完整的单独的View来容纳您的Queue<Movies>模型!

pjngdqdw

pjngdqdw2#

正如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>

相关问题