Мой оператор foreach выводит 2 ошибки

Когда я пытаюсь вывести таблицу с оператором foreach, она выводит 2 ошибки, говорящие о том, что MovieViewModel и MovieVM не существуют.

Это часть файла Index.cshtml:

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

Это часть файла MoviesController.cs:

  List<MovieViewModel> MovieVM = new List<MovieViewModel>
  {
    new MovieViewModel {
      MovieID = movie.MovieID,
      MovieName = movie.MovieName,
      MovieDescription = movie.MovieDescription,
      MoviePrice = movie.MoviePrice,
      MovieCategory = movie.MovieCategory,
      MovieYear = movie.MovieYear
    },
  };

  return View(MovieVM);
}

Он выводит эти 2 ошибки о foreach:

"The type or namespace 'EmployeeViewModel' does not exist in the namespace 'WebApplication3.Models '(are you missing an assembly reference?)"

а также

"The name 'MovieVM' does not exist in the current context"

MovieViewModel item in MovieVM смысла нет. MovieVM был объявлен в вашем методе действия, а не в представлении. Это разные контексты. Я думаю, вы, вероятно, хотите получить доступ к модели? В этом случае используйте MovieViewModel item in Model
ADyson 22.05.2019 13:16

Что касается другой ошибки, код, который вы показали, нигде не упоминает EmployeeViewModel, поэтому проблема должна исходить из чего-то, что вы не показали. Ошибка должна была сообщить вам номер строки, в которой она произошла. В любом случае, похоже, что вы, возможно, пропустили утверждение using в своем представлении. Либо так, либо вы сделали опечатку и сослались на неправильный класс

ADyson 22.05.2019 13:19

Вы можете добавить отсутствующие пространства имен в web.config внутри папки представлений <add namespace="Example.ViewModels" />

Hasta Tamang 22.05.2019 13:19

Я также не могу понять, как вы получаете EmployeeViewModel не существует. Если у вас нет ссылки на это в вашем представлении или, как сказал @ADyson, он сделал опечатку

Hasta Tamang 22.05.2019 13:21

Я изменил MovieVM на Model, и эта ошибка исчезла, но другая до сих пор не исправлена. он продолжает говорить, что отсутствует ссылка. Это какой-то оператор использования, который вызывает у меня эту ошибку?

Diogo Teixeira 22.05.2019 13:31

Мы не знаем наверняка, потому что вы не показали нам код, в котором пытаетесь использовать EmployeeViewModel. Вы только что показали нам код, который вместо этого говорит о MovieViewModel. Мы также не знаем, где вы объявили класс EmployeeViewModel (то есть, каково его пространство имен, в какой сборке он находится и существует ли он вообще).

ADyson 22.05.2019 13:34

Извините, я забыл изменить имя, EmployeeViewModel было старым именем файла и класса. Этот файл теперь называется MovieViewModel. В этом файле у меня есть только класс «MovieViewModel» с несколькими публичными get/set.

Diogo Teixeira 22.05.2019 16:37
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
7
102
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы должны определить тип модели в виде.

@model IEnumerable<MovieViewModel>

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

образец: https://dotnetfiddle.net/GA0yHD

Мой код очень похож на ваш, разница только в том, что в контроллере я получаю данные из базы данных, это не кастомно. Есть ли что-то, что я должен изменить, чтобы быть данными базы данных? Может каталог или еще что?

Diogo Teixeira 22.05.2019 16:55

Привет @DiogoTeixeira. Реальная разница в представлении. Я объявляю IEnumerable<MovieViewModel> как @model и делаю foreach для Modelnot MovieVM(имя вашей переменной). Представление не знает переменных, объявленных в контроллере.

asd 22.05.2019 17:06

Я уже пробовал это много раз, и появляется одна и та же ошибка, у меня есть IEnumerable @model, и у меня есть элемент var в модели, но он все равно выводит только 1 запись.

Diogo Teixeira 22.05.2019 17:08

@DiogoTeixeira Сколько записей возвращает база данных? в примере видно, как рендерятся все записи dotnetfiddle.net/GA0yHD. Теперь покажите 1 запись, а не предыдущую ошибку

asd 22.05.2019 17:15

обновление, я пытался создать представление сведений, и когда я пытался написать @model, он отображался только в классе, разве он не должен отображаться в модели?

Diogo Teixeira 22.05.2019 17:16

у меня есть в настоящее время 3 записи в базе данных, просто для проверки

Diogo Teixeira 22.05.2019 17:16

@DiogoTeixeira В подробном представлении вы должны показывать только модель @model MovieViewModel. Я не понимаю, что вы имеете в виду под классом, а не моделью. Модель - это класс

asd 22.05.2019 17:22

простите, я просто так запутался. Я сделал все, что вы сказали мне, и то, что сказали люди выше, и это не работает, и я не вижу для этого никаких причин.

Diogo Teixeira 22.05.2019 17:26

@DiogoTeixeira Вы возвращаете только 1 запись. SingleOrDefault вернуть 1 запись или ноль, если условие не выполнено.

asd 22.05.2019 17:35

Подожди, только не говори мне, что проблема в этом... я так злюсь. Тогда что мне поставить вместо SingleOrDefault?

Diogo Teixeira 22.05.2019 17:42

@DiogoTeixeira вы фильтруете по идентификатору. Если с базой данных все в порядке, может существовать только запись

asd 22.05.2019 18:05

ооо, тогда что мне сделать, чтобы он выводил все записи базы данных?

Diogo Teixeira 22.05.2019 18:24

Привет @DiogoTeixeira. Если вам нужны все записи db.MoviesData.ToList(), а затем сопоставьте результат со списком MovieViewModel с помощью foreach или используйте Nuget AutoMapper.

asd 23.05.2019 08:34

Имеет ли это соединение с БД какое-либо отношение к ошибке?

 public ActionResult Index()
    {
        PAPEntities db = new PAPEntities();
        MoviesData movie = db.MoviesData.SingleOrDefault(x => x.MovieID == 1);

        List<MovieViewModels> MovieVM = new List<MovieViewModels>
            {
                new MovieViewModels {
                 MovieID = movie.MovieID,
                 MovieName = movie.MovieName,
                 MovieDescription = movie.MovieDescription,
                 MoviePrice = movie.MoviePrice,
                 MovieCategory = movie.MovieCategory,
                 MovieYear = movie.MovieYear
                    },
        };


        return View(MovieVM);
    }
}

Другие вопросы по теме