В настоящее время я делаю класс Edit в главном контроллере. Вроде все хорошо, но при сборке программы вылетает ошибка
Это класс Edit в MoviesController:
public ActionResult Edit(int? Id)
{
if (Id == null)
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
MoviesData moviesData = db.MoviesData.Find(Id);
if (moviesData == null)
return HttpNotFound();
return View(moviesData);
}
(MoviesData — это экземпляр таблицы базы данных)
Это модель просмотра:
public class MovieViewModel
{
public int MovieID { get; set; }
public string MovieName { get; set; }
public string MovieDescription { get; set; }
public string MovieCategory { get; set; }
public string MovieYear { get; set; }
}
Каждый раз, когда я пытаюсь собрать программу, появляется эта ошибка:
'System.Data.Entity.DynamicProxies.MoviesData_4D99853B016ED5E65AF8566A78AEB274D91AD066D99E2B2FA50D6EA0156AAA21', но для этого словаря требуется элемент модели типа 'WebApplication3.Models.MovieViewModel'
Я понимаю, что означает ошибка, но я понятия не имею, как ее изменить.
Добро пожаловать в stackoverflow, db.MoviesData.Find(Id);
возвращает вам Модель, но return View(moviesData);
для этого нужна viewModel, пожалуйста, преобразуйте вашу модель в viewModel
@haldo Как я могу конвертировать данные фильмов?
Привет. Это ваш седьмой основной вопрос о C#/MVC за неделю, который можно решить, изучив ошибку и приложив некоторые усилия, чтобы попытаться понять проблему. Это та же проблема, что и в один из ваших предыдущих вопросов. Я бы посоветовал вам следовать приличному учебнику или книге по ASP.NET MVC и C# и не задавать новый вопрос для каждой проблемы, с которой вы сталкиваетесь, иначе вы очень скоро рискуете быть забаненным за вопрос.
Вам нужно преобразовать DTO в вашу модель представления:
MovieViewModel viewModel = new MovieViewModel()
{
MovieID = moviesData.MovieID (or maybe only .ID?),
MovieName = moviesData.MovieName
etc....
}
return View(viewModel );
Вы не возвращаете
MovieViewModel
в представление. Ты возвращаешьсяMoviesData
. ПреобразованиеmoviesData
в модель представления