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

时间:2014-06-04 19:32:46

标签: c# asp.net asp.net-mvc razor

这是我的控制器动作方法。

public class MoviesController : Controller
{
        private MovieDBContext db = new MovieDBContext();

        // GET: /Movies/
        public ActionResult Index()
        {
            return View( db.Movies.ToList() );
        }
}

正如可以看到List被传递给View这就是为什么我期望在ListviewView中使用IEnumerable它的作用为View

以下是@model IEnumerable<MVCWebApplication2.Models.Movie>

的第一行
List

为什么传递的值IEnumerable表现为IEnumerable? 是List的超级{{1}}吗?

2 个答案:

答案 0 :(得分:2)

List<T>实现了IEnumerable<T>接口:

http://msdn.microsoft.com/en-us/library/6sh2ey19(v=vs.110).aspx

通常最好在可能的情况下尝试使用接口来保持代码解耦,这就是为什么View是这样的脚手架的原因。在这种情况下,您可以将实现Movie的任何其他IEnumerable<T>集合传递到您的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>实施IEnumberable<T>movies将由同一View呈现,而不必对其进行任何更改。如果您的View已输入List<Movies>,则需要创建一个单独的View以适应您的Queue<Movies>模型!

答案 1 :(得分:2)

正如克里斯提到的,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>