Представление "Индекс" или его мастер не найдены

Я новичок в типе проекта C# MVC, и когда я создал пустой проект C# MVC, я заметил следующую ошибку:

The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
~/Views/ControllerName/Index.aspx
~/Views/ControllerName/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/ControllerName/Index.cshtml
~/Views/ControllerName/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml

У меня есть файл Index.cshtml в папке Views. Почему движок MVC не смотрит прямо в папку Views? Как мне решить эту проблему?

Мое содержимое RouteConfig.cs:

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = <ControllerName>, action = "Index", id = UrlParameter.Optional }
            );

Содержимое моего контроллера:

 public ActionResult Index()
        {
            return View();
        }

9 ответов

Решение

MVC ищет представления (например, Index) в папке представлений, но они также должны находиться в папке, названной в честь своего контроллера (за некоторыми исключениями, такими как частичные).

Так что это структура, которой вы хотите следовать в вашем проекте

Controllers (folder)
    HomeController (.cs)
    AccountController (.cs)

Views (folder)
    Home (folder)
        Index (.cshtml)
    Account (folder)
        Index (.cshtml)

У меня была эта проблема несколько раз раньше, и это могут быть любые другие ответы, но это также может быть действие Build Action, которое вызывает проблему.

Если вы щелкнете правой кнопкой мыши по файлу.cshtml /.vbhtml, с которым у вас возникли проблемы, выберите "Свойства" и в окне свойств задайте для параметра "Действие при построении" значение " Содержимое", это может стать решением вашей проблемы.

Механизм MVC ищет представление в разделе Shared или в папке, имя которой совпадает с префиксом вашего класса контроллера. Так что если у вас есть ABCController вам нужно иметь свой Index.cshtml просмотр под папкой Views/ABC,

PS: в вашем примере у вас есть суффикс к имени вашего контроллера (ControllerName), Я не думаю, что это хорошая практика, всегда называйте своих контролеров [Name]Controller

Когда представление возвращается, он ожидает, что связанный .cshtml Файл находится в той же структуре папок вида, что и макет контроллера для этой области (если области не используются, то есть только 1 папка вида и 1 папка контроллера). Имя контроллера будет именем папки в папке представлений, а имя actionresult будет ожидаемым именем файла.cshtml.

К счастью, существует простой способ исправить ситуацию, когда файл представления отсутствует. Щелкните правой кнопкой мыши на Index для вашего результата действия, а затем выберите Добавить вид. Нажмите хорошо, и это создаст Index.cshtml для вас внутри правильной папки. Теперь, когда вы запустите проект, и перейдите к Indexэто то, что вы увидите.

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

Хороший способ диагностировать, что-то не так с вашим кодом или что-то не так с вашими настройками IIS, - запустить его в отладчике VS 201X. Если он работает там, но не запускается под IIS напрямую, есть большая вероятность того, что безопасность удостоверения пула приложений будет взломана.

Я знаю, что это старый пост, но я столкнулся с такой же ситуацией, работая на Ubuuntu 16.04 и Mono 4.2.1, и ничего из этого не помогло. Я начал копаться в других вещах, и через неделю я узнал, что по какой-то причине Microsoft.Web.WebPages.OAuth.dll вызывал эту ошибку. после удаления этой dll и удаления всех ссылок на нее (я в любом случае не использую open auth) все сразу начало работать, даже используя простое членство с MySQL. Поэтому я хотел опубликовать это здесь на случай, если кто-то столкнется с такой же ситуацией в Mono и Linux, потому что это происходит в Google.

В вашей сборке могут быть старые / плохие сборки ASP.Net.

Если вы убедились, что ваш контроллер, пространство имен и просмотр имен находятся в нужном месте, есть большая вероятность, что у вашей сборки MVC/ASP возникли проблемы при работе с текущей средой Mono.

Если вы попробовали приемы, чтобы скопировать все сборки.Net, которые вы можете найти, и пометить их в своем бункере, есть большая вероятность, что Mono или его конфигурация не будут корректно соединяться - и вам больше не нужно это делать. У меня была эта проблема при обновлении машины до последней сборки Mono. Я вытер эти сборки из своего бина и NuGet установил последние сборки в папке Mono MVC Packages.

Первое, что вы увидите, это:

  • Microsoft.AspNet.Mvc
  • Microsoft.AspNet.Infrastructure
  • Microsoft.AspNet.WebPages
  • Microsoft.AspNet.Razor

Это решит эти проблемы.

У меня был виртуальный каталог, который не правильно ссылался на фактический каталог. (В Windows) Я исправил это, зайдя в IIS (Диспетчер информационных служб Интернета) и щелкнув правой кнопкой мыши виртуальный каталог, на который неправильно ссылались (В вашем случае Views). Виртуальные каталоги будут иметь эту маленькую иконку рядом с ними:

введите описание изображения здесь

Щелкните правой кнопкой мыши и выберите Manage Virtual Directory > Advanced Settings, Убедитесь, что физический путь совпадает с тем, куда, по вашему мнению, он должен идти:

введите описание изображения здесь

Это не будет применяться ко всем случаям, но в некоторых случаях возможно совпадение.

Полезный шаг диагностики - щелкнуть правой кнопкой мыши внутри действия контроллера, выбрать "Перейти к просмотру".

Если Visual Studio может найти представление, то оно, вероятно, находится в нужной папке, поэтому перепроверьте свой URL. Например, если используется область, то имя области должно быть в URL:

/Area/Controller/Action
Другие вопросы по тегам