繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM