Правильный способ использования _viewstart.cshtml и частичных просмотров Razor?

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

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

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

Это более DRY, чем добавление директивы @Layout к каждому представлению.

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

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

Example project structure

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

@{
    Layout = "";
}

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

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

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

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

Ответ 1

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