Созданный файл вида Razor не распознает класс модели - PullRequest
0 голосов
/ 24 октября 2018

Когда я собираю и запускаю (dotnet run) свой проект ASP.NET Core MVC с использованием кода VS, я получаю два следующих сообщения об ошибках:

obj / Debug / netcoreapp2.1 / Razor/Views/Product/List.g.cshtml.cs(28,88): ошибка CS0246: не удалось найти тип или имя пространства имен «ProductsListViewModel» (отсутствует директива using или ссылка на сборку?) [/ Users /pedram / OneDrive - Дом друзей AB / visualstudioonmacprojects / SportsStore / SportsStore.csproj]

obj / Debug / netcoreapp2.1 / Razor / Views / Product / List.g.cshtml.cs (128,71):ошибка CS0246: не удалось найти тип или имя пространства имен «ProductsListViewModel» (отсутствует директива об использовании или ссылка на сборку?) [/ Users / pedram / OneDrive - Дом друзей AB / visualstudioonmacprojects / SportsStore / SportsStore.csproj]

Сборка не удалась.Пожалуйста, исправьте ошибки сборки и запустите снова.

Когда я перехожу к упомянутым файлам, я понимаю, что к классу ProductsListViewModel необходимо обратиться, используя его полное имя SportsStore.Models.ViewModels.ProductsListViewModel в обоих местах проектаправильно построить.Но это только решает проблему до следующей сборки.

Очистка проекта перед сборкой (dotnet clean), похоже, тоже не помогает.

У меня нет большого контроля над тем, что происходит внутри папки obj .В чем причина этой проблемы с пространством имен?

Обновление:

Содержимое /Views/Product/List.cshtml

@model ProductsListViewModel
@foreach (var p in Model.Products) {
    @Html.Partial("ProductSummary", p)
}
<div page-model="@Model.PagingInfo" page-action="List" page-classes-enabled="true"
     page-class="btn" page-class-normal="btn-secondary"
     page-class-selected="btn-primary" class="btn-group pull-right m-1">
</div>

1 Ответ

0 голосов
/ 24 октября 2018

В первой строке вашего файла .cshtml вы объявляете тип модели, используемой в вашем представлении.Из сообщения об ошибке ясно, что ProductsListViewModel не может быть решена.Чтобы решить эту проблему, у вас есть по крайней мере два варианта:

  1. Использование @model SportsStore.Models.ViewModels.ProductsListViewModel, которое является полным именем (FQN).
  2. Использование @usingвот так:

    @using SportsStore.Models.ViewModels
    @model ProductsListViewModel
    

Это в основном вопрос выбора, который вы должны выбрать.

Код Visual Studio не делаеткажется, поддерживает файлы Razor так же, как и Visual Studio. Кажется, что он имеет достойную поддержку подсветки синтаксиса, но, похоже, не компилирует файлы .cshtml для обнаружения ошибок компиляции, подобных той, что у вас есть.

Файл, который вы сначала изменили (List.g.cshtml.cs), представляет собой сгенерированный файл, который создается при обработке вашего файла .cshtml и не должен изменяться.Если вы измените его, он будет заменен при следующей обработке исходного файла .cshtml.

...