Внесение изменений в MOVIE list MVC tutorial - Добавление нового частичного представления - PullRequest
0 голосов
/ 17 июня 2011

Я изучаю этот урок по основам MVC Учебник по списку фильмов в MVC Я в конце урока.Теперь я хочу внести свои изменения в этот урок.Сначала я хочу добавить новый частичный вид к этому списку фильмов.Поэтому в DIV я поместил следующий код на страницу индекса, которая уже отображает список фильмов:

 @{Html.RenderPartial("_NewPartialView");}

Чтобы это работало, сначала в папке «Модели» я создаю новый класс модели для NewClass.CS.Папка модели уже содержит модель Movie Model Class.Movie.cs. Вопрос 1. Должен ли я создавать отдельный файл .cs модели для нового частичного представления или создавать дополнительные классы в том же файле Movie.cs?

Затем я создал частичное представление, используя строительные леса на основе новой модели (сейчас у меня есть новая модель в отдельном файле .cs - то есть теперь у меня есть две модели: одна для фильмов и одна для новой модели (длячастичное представление). Я хочу, чтобы это отображалось на исходной странице индекса списка фильмов как частичное представление сбоку.

У меня есть MoviesController с кодом

 public ViewResult Index()
    {
        return View(db.Movies.ToList());
    }

Я что-то пропустил?? Если я пытаюсь запустить это, он ломается в строке кода

 @{Html.RenderPartial("_NewPartialView");}

, и сообщение об ошибке, которое я получаю в этой точке кода: «Элемент модели, переданный в словарь, имеет тип System.Collections.Generic.List 1[Project.Models.Movie]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [Project.Models.NewModel].Модель. Мне нужна помощь и ценю любую информацию, которая поможет мне учиться. Спасибо

1 Ответ

2 голосов
/ 17 июня 2011

Глядя на ваше сообщение об ошибке, ваше представление ожидает IEnumerable, который содержит классы Project.Models.NewModel, где вы передаете List, содержащий классы Project.Models.Movie.По сути, вы передаете свои данные представления, с которыми он не рассчитан.Вы можете либо изменить свой вид / частичное в верхней части, чтобы прочитать что-то вроде:

@model List<Project.Models.Movie>

Это устанавливает, что вы ожидаете получить список переходов, который вы и передали в контроллере в этом примере.С другой стороны,

@model IEnumerable<Project.Models.Movie>

будет работать так же, как List наследует от IEnumerable.

Если вы хотите, чтобы представление принимало IEnumerable<Project.Models.NewModel>, то вам нужно изменить свой контроллерк чему-то вроде: (я делаю предположения о свойствах вашей модели здесь)

public ViewResult Index()
{
    return View(db.Movies.Select(m => new NewModel { Title = m.Title, Director = m.Director}));
}

Это тогда передаст вам IEnumerable<Project.Models.NewModel> представление.

На другом примечании более простой способссылочные партиалы в бритве:

@Html.Partial("_NewPartialView")

Обновление

Вам нужно создать себе ViewModel, чтобы он выглядел примерно так:

public class IndexViewModel
{
  public List<Movie> Movies {get; set;}
  public List<NewModel> NewModels {get; set;}
}

public ViewResult Index()
{
    var viewModel = new IndexViewModel
    {
      Movies = db.Movies.ToList(),
      NewModels = new List<NewModel>() // Or however you populate it
    };

    return View(viewModel );
}

Тогда впо вашему мнению, это будет что-то вроде этого для ваших фильмов

@foreach (var moive in Model.Movies) { }

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

@Html.Partial("_NewPartialView", Model.NewModels)

Обратите внимание, что вам нужно будет обновить вашу модель в верхней части индексастраница для ссылки на IndexViewModel.

...