Почему мой просмотр не включает _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();
}