ASP. NET Core MVC - InvalidOperationException: элемент модели, переданный в ViewDataDictionary, имеет тип x - PullRequest
0 голосов
/ 30 апреля 2020

Я получаю классическое c исключение:

InvalidOperationException: элемент модели, переданный в ViewDataDictionary, имеет тип 'PieShop.ViewModels.HomeViewModel', но этот экземпляр ViewDataDictionary требует элемент модели типа 'System.Collections.Generi c .IEnumerable`1 [PieShop.Models.Pie]'

при попытке визуализации страницы в ASP. NET Core MVC.

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

public class HomeController : Controller
{
    private readonly IPieRepository pieRepository;

    public HomeController(IPieRepository pieRepository)
    {
        this.pieRepository = pieRepository;
    }

    public IActionResult Index()
    {
        var pies = pieRepository.GetAllPies();

        var vm = new HomeViewModel()
        {
            SomeData = "haiod",
            Title = "Welcome to the Pie Shop"
        };

        return View(vm);
    }
}

Вот модель вида:

public class HomeViewModel
{
    public string Title { get; set; }
    public string SomeData { get; set; }
}

А вот вид (который называется Views/Home/Index.cshtml:

@model PieShop.ViewModels.HomeViewModel

<h1>@Model.SomeData</h1>

Модель передается в вид из контроллера, и то, что вид объявляет в качестве своей модели, явно точно такого же типа. Что дает?

1 Ответ

0 голосов
/ 30 апреля 2020

Оказывается, я объявил тип для модели в общем _Layout.cshtml, потому что я копировал / вставлял его во время рефакторинга:

@model IEnumerable<PieShop.Models.Pie>

Так что ... просто ошибка copypasta: facepalm:

...