Почему Razor _layout.cshtml имеет подчеркивание в имени файла? - PullRequest
139 голосов
/ 02 января 2011

В проекте ASP.NET MVC 3 по умолчанию файлы макета и частичные cshtml начинаются с подчеркивания

  • _viewstart
  • _Layout
  • _LogOnPartial

Почему это соглашение и для чего оно используется?Должен ли я следовать этому соглашению?

Придает ли фреймворк какое-то особое значение файлу .cshtml, который начинается с подчеркивания?

Ответы [ 5 ]

198 голосов
/ 02 января 2011

Razor был разработан для веб-страниц ASP.NET (WebMatrix), которые не имеют встроенной защиты в отношении папок Views и Routing, которую вы получаете в MVC.Поскольку страницы макета на веб-страницах не предназначены для непосредственного обслуживания, к ним добавляется префикс подчеркивания.И инфраструктура веб-страниц была настроена так, чтобы файлы с начальными подчеркиваниями в их именах не запрашивались напрямую.Другие файлы .cshtml на веб-страницах обычно должны быть доступны для просмотра.Они эквивалентны файлам .asp или .php.

Команда ASP.NET заявила, что веб-страницы являются отправной точкой в ​​разработке ASP.NET, что должно вовремя привести к переходу на MVC (для тех, кточто хочу двигаться дальше).Частично это означает, что переход с веб-страниц на MVC должен быть максимально простым.Следовательно, имеет смысл перенести соглашения об именах, установленные на веб-страницах, в файлы MVC Razor.

Таким образом, является технической причиной для добавления префиксов имен файлов кподчеркивание - это просто не относится к MVC.

[ОБНОВЛЕНИЕ октябрь 2018]

В новой платформе ASP.NET Core Razor Pages (кроме версии 2.1)), файлы с начальным подчеркиванием игнорируются при создании маршрутов при запуске - даже если они имеют директиву @page (которая обычно делает их маршрутизируемой Razor Page).Вот почему имеет смысл называть макет и частичные файлы символом подчеркивания в начале приложения Razor Pages, если они не предназначены для просмотра.

13 голосов
/ 02 января 2011

Вот как это делает Ruby on Rails (Partials начинается с _, но вызов Render Partial не включает _), и ASP.net MVC черпает в этом вдохновение.

Никаких технических причин на самом деле, просто соглашение, ясно показывающее намерение других разработчиков (и вас самих через 6 месяцев) сказать: это частичное представление.

7 голосов
/ 02 января 2011

Страницы, которые не могут быть показаны прямыми запросами вашего браузера (главные страницы, частичные просмотры и т. Д.), Имеют подчеркивание (_) в начале своих имен.

Поэтому, если вы попытаетесь сделать запрос к _Layout.cshtml (это главная страница), вы получите сообщение об ошибке от сервера.

Это способ отличить файлы, которые не могут быть просмотрены как отдельные страницы, в Razor View Engine.

Думайте об этом так ... в MVC 2 ... вы бы различали частичное представление и мастер-сайт с помощью суффикса .master, .ascx, и обычные страницы - .aspx, с другой стороны, в представлении Razor ... все представления являются .cshtml, поэтому для различения частичных и главных страниц у них будет префикс (_). В этом нет ничего обязательного, просто «конвенция».

2 голосов
/ 02 января 2011

Насколько я знаю, это просто соглашение, используемое для определения цели файла; Я не верю, что это на самом деле изменит поведение файла. В большинстве контекстов разработки добавление подчеркивания идентифицирует что-то, что должно быть предназначено для «частного» использования, либо классом, либо в этом случае другим шаблоном.

1 голос
/ 06 июля 2012

Я не использую MVC, но на веб-страницах, которые также используют синтаксис бритвы, префикс _ обычно указывает на то, что страница предназначена не для доступа пользователя, а для других страниц или некоторого кода.Если вы попытаетесь перейти на страницу, содержащую _prefix, asp.net заблокирует доступ к ней.Вот почему он используется со страницами макетов и другими подобными страницами, поскольку пользователь не должен получать к ним прямой доступ.

Что-то вроде папки App_Code в asp.net

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