Вопрос или проблема
Страница макета “~/Views/Shared/_Layout.cshtml” не найдена.
Я получил эту ошибку и не могу понять, в чем дело. Я уверен, что файл _layout.cshtml находится в общей папке, и для того, чтобы проверить разные варианты, я переместил его в папку Home, и тогда мне сказали, что файл Views/Home/_Layout.cshtml тоже не удается найти. Теперь я думаю, что проблема в вызове этого файла по какой-то причине.
Я не собираюсь притворяться, что знаю ASP.NET MVC4, поэтому, пожалуйста, когда будете отвечать, объясните это так, как вы бы объяснили кому-то, кто совершенно не знаком с системой. Верите или нет, но эта ошибка произошла из учебника №1 ха-ха.
Вот код, чтобы показать, что я действительно всё сделал правильно:
@{
ViewBag.Title = "Домашняя страница";
Layout = "~/Views/Shared/_Layout.cshtml";
}
А вот и картинка местоположения.
p.s. Я провел исследование, Google ничего не знает, и есть еще один вопрос здесь, но он был задан в 2008 году с MVC3, который совершенно отличается.
Я использую ASP.NET MVC4 на Azure.
Спасибо.
Если вы переименуете свой проект, вы можете получить эту ошибку. Решение простое.
Уберите тильду (~
) -> /View/....
вместо ~/View...
, также в вашем файле _Layout уберите тильду из всех ссылок.
Если кого-то это интересует или у кого-то возникла та же проблема. Похоже, что это может быть проблемой сервера (поэтому он работает нормально на локальном хосте) 🙂 Но всё равно, если это случится с вами, сделайте следующее:
- дублируйте макет и переименуйте его в Layout2
- измените его вызов в ViewStart.cshtml, чтобы правильный макет вызывался для каждой страницы
- Перейдите на Azure или к вашему серверу и удалите всё.
- воссоздайте свою директорию
- Вернитесь в VS и очистите, соберите и опубликуйте
И у вас всё будет в порядке.
Поиск ‘_Layout.cshtml’ в Обозревателе решений (справа). Тогда вы найдете _Layout.cshtml. Щелкните правой кнопкой мыши на файл и выберите ‘Ограничить этим’.
Вот и всё! Все ваши отсутствующие файлы будут видны в папке ‘Shared’. Не знаю, почему именно это происходит.
Вместо:
@{
ViewBag.Title = "Домашняя страница";
Layout = "~/Views/Shared/_Layout.cshtml";
}
Попробуйте это:
@{
Layout = null;
}
Просто удалите файл из вашего проекта и воссоздайте его. Если вы посмотрите на папку вашего проекта, вы увидите, что там нет файла Layout.
Если вы испытываете это и уверены, что файл находится в правильном расположении, попробуйте удалить всё с веб-сервера и перенести заново.
Моя ситуация:
- Использую WebDeploy
- Удалил файл “_Layout.cshtml” из проекта, так как предыдущий раз; после развертывания код не работал, я осознал свою ошибку, поэтому добавил его обратно и переразвернул – но это не решило проблему.
- Не было проблем в среде разработки.
В Обозревателе решений, щелкните правой кнопкой мыши на папку Shared, затем Опубликовать Shared.
Ответ или решение
К сожалению, у вас возникла проблема с тем, что файл макета _Layout.cshtml
не может быть найден в ASP.NET MVC4. Давайте разберем возможные причины этой проблемы и способы их решения.
Возможные причины
-
Неверное имя или расположение файла: Убедитесь, что файл действительно называется
_Layout.cshtml
и находится по путиViews/Shared/
. Путь должен быть абсолютно правильным, включая заглавные буквы, так как в некоторых файловых системах они имеют значение. -
Синтаксическая ошибка в коде: Ваша запись для задания макета в
cshtml
должна быть корректной. Например:@{ ViewBag.Title = "Home Page"; Layout = "~/Views/Shared/_Layout.cshtml"; }
Попробуйте временно установить
Layout = null;
, чтобы исключить возможные проблемы с привязкой:@{ Layout = null; }
- Проблемы с развертыванием на сервере: Проблема может быть связана с тем, как вы развертываете своё приложение на Azure. В таких случаях, даже если локальная разработка идет хорошо, на сервере могут не быть загружены все файлы.
Решение проблемы
-
Проверьте файл макета: Убедитесь, что
_Layout.cshtml
действительно существует вViews/Shared
в вашей решении. Вы можете использоватьSolution Explorer
в Visual Studio для поиска файла и проверки его расположения. -
Очистка и повторная публикация:
- Удалите все файлы с вашего сервера (например, через FTP или панель управления Azure).
- Воспользуйтесь командой "Clean" в Visual Studio для очистки вашего проекта.
- Затем создайте новый билд проекта и снова опубликуйте его.
-
Изменение пути в вызове: Попробуйте изменить путь в вашей переменной
Layout
, убрав тильду (~
). Не всегда это будет правильным, но некоторые серверные конфигурации могут влиять на это.Layout = "/Views/Shared/_Layout.cshtml"; // без ~
-
Дублирование и переименование: Если вы по-прежнему получаете ошибки, попробуйте создать дубликат файла
_Layout.cshtml
и переименовать его, например, наLayout2.cshtml
, а затем измените ссылку вViewStart.cshtml
на новый файл. -
Проверка ссылок в макете: Внутри самого файла
_Layout.cshtml
убедитесь, что все ссылки корректные и не содержат тильды если вы изменили путь. - Выполнение команд для публикации: Находясь в
Solution Explorer
, щелкните правой кнопкой мыши на папкеShared
и выберите опциюPublish Shared
, чтобы убедиться, что все файлы, включая макет, будут опубликованы.
Заключение
Проблема, которую вы столкнулись, может иметь разные причины, но следуя вышеуказанным шагам, вы сможете выявить и исправить проблему. Если есть более глубокие вопросы о том, как работает ASP.NET MVC4, не стесняйтесь задавать их. Мы здесь, чтобы помочь вам!