首页 > 解决方案 > 我试图从我的数据库中输出所有数据,并且 foreach 语句中存在错误

问题描述

我正在尝试输出数据库中的所有数据,但我的 foreach 语句中有这个错误,我无法解决 2 天

控制器文件:

 public ActionResult Index()
    {
        PAPEntities db = new PAPEntities();
        MoviesData[] movies = db.MoviesData.ToArray();

        movies.Select(movie => new MovieViewModels
        {
            MovieID = movie.MovieID,
            MovieName = movie.MovieName,
            MovieDescription = movie.MovieDescription,
            MoviePrice = movie.MoviePrice,
            MovieCategory = movie.MovieCategory,
            MovieYear = movie.MovieYear
        });


        return View(movies);
    }

风景:

 <table class="table table-bordered table-responsive table-hover">
    <tr>
        <th><b>Movie Name </b></th>
        <th><b>Movie Category </b></th>
        <th><b>Movie Year </b></th>
        <th><b>Movie Price</b></th>

    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>@item.MovieName</td>
            <td>@item.MovieCategory</td>
            <td>@item.MovieYear
            <td>@item.MoviePrice</td>
        </tr>
    }
</table>

该模型是一个名为 MovieViewModel 的简单类,具有 6 个属性

foreach 语句无法对“MovieViewModels”类型的变量进行操作,因为“MovieViewModels”不包含“GetEnumerator”的公共实例定义

标签: c#asp.net-mvcrazor

解决方案


这里有几点:

  1. 你没有捕捉到结果Select
  2. 大概您的视图没有正确的模型定义

对于 1,请注意您应该在缓冲之前进行投影 -如果 LINQ 可以在投影中绕过它,那么创建对象的实际实例是没有意义的,所以:MoviesData

(注:我冒昧重命名MovieViewModelsMovieViewModel

MovieViewModel[] movies = db.MoviesData.Select(movie => new MovieViewModel
{
    MovieID = movie.MovieID,
    MovieName = movie.MovieName,
    MovieDescription = movie.MovieDescription,
    MoviePrice = movie.MoviePrice,
    MovieCategory = movie.MovieCategory,
    MovieYear = movie.MovieYear
}).ToArray();

return View(movies);

(这也意味着 SQL 可能仅限于您感兴趣的列,避免获取不必要的列)

然后在视图中,您应该有:

@model MovieViewModel[]

它告诉 razor 使用的类型Model

有了这个:事情应该会奏效。


推荐阅读