Почему мой просмотр не включает _Layout.cshtml?
Недавно я внес некоторые изменения в проект MVC 3.
Когда я запустил его, в представления не входят такие файлы, как Site.css.
Когда я отлаживаю свой Index() ActionController, он переходит непосредственно в представление, не включая файлы, такие как _Layout.cshtml. Поэтому я просто получаю представление с белым фоном, без меню и т.д.
Файл Global.asax.cs содержит следующий код:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}/{page}", // URL with parameters
new { controller = "Survey", action = "DisplayQuestions", id = "", page = "" }
);
}
Ответы
Ответ 1
Если точка останова в действии вашего контроллера будет удалена, маршруты могут быть неправильными, но это не является причиной того, что _Layout.cshtml не загружается.
Несколько вещей, чтобы проверить:
- Является ли ваше представление использующим View(), а не PartialView() (последний игнорирует ViewStart.cshtml и, следовательно, _Layout.cshtml).
- Вы недавно переместили свой _Layout.cshtml/Вы переименовали Shared (или создали SharedController случайно)?
-
В вашем представлении есть что-то вроде этого вверху, которое дезактивирует _Layout.cshtml?
@{
Layout = "";
}
-
До сих пор существует ваш _ViewStart.cshtml со следующим кодом, который активирует _Layout.cshtml?
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Ответ 2
Переместите маршрут "Default2" вверх по маршруту "По умолчанию".
маршрут по умолчанию более общий, поэтому Default2 должен быть первым
Кроме того, внутри ваших представлений убедитесь, что вы указываете макет для использования
@{
Layout = "yourlayoutpage.cshtml"
}
Ответ 3
Похоже, вы избавились от свойства макета в своем индексном представлении.
@{
Layout = "~/Views/Shared/_Layout.cshtml"
}
Ответ 4
Я знаю, что это было разрешено, но для меня (MVC 5) мне пришлось добавить эту строку кода, прежде чем обычный просмотр отобразит ее содержимое
public ActionResult Index()
{
return View();
}