Представление "Индекс" или его мастер не найдены
Я новичок в типе проекта 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