Правильный способ использовать _viewstart.cshtml и частичные виды Razor? - PullRequest
154 голосов
/ 02 ноября 2010

Я использую _viewstart.cshtml для автоматического назначения одинакового макета бритвы для моих видов.

Это простой файл в корне моей папки Views, который выглядит так:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Это более СУХОЙ, чем добавление директивы @Layout для каждого отдельного представления.

Однако это создает проблему для частичных представлений Razor, поскольку они запускают содержимое _viewstart.cshtml и, следовательно, неправильно присваивают себе макет, что делает их больше не частичными.

Вот гипотетический проект, показывающий файл _viewstart.cshtml, общий файл _layout.shtml и частичное представление («AnonBar.cshtml»).

Example project structure

В настоящее время я могу обойти это путем добавления следующей строки к каждому частичному представлению:

@{
    Layout = "";
}

Это кажется неправильным способом обозначать представление как частичное в Razor. (Обратите внимание, что в отличие от механизма просмотра веб-форм, расширение файла одинаково для частичных представлений.)

Другие варианты, которые я рассмотрел, но это еще хуже:

  • Помещение всех частичных представлений в общую папку, чтобы они могли совместно использовать общий _viewstart.cshtml. Это нарушает соглашение о представлениях, находящихся в той же папке, что и их контроллер.
  • Не используется частичное представление.

Является ли это тем, что все еще дорабатывается командой разработчиков движка Razor, или мне не хватает фундаментальной концепции?

1 Ответ

233 голосов
/ 03 ноября 2010

Если вы return PartialView() с ваших контроллеров (вместо return View()), то _viewstart.cshtml не будет выполнено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...