В проекте ASP.NET MVC 3 по умолчанию файлы макета и частичные файлы cshtml начинаются с подчеркивания
_viewstart
_Layout
_LogOnPartial
Почему это соглашение и для чего оно используется? Должен ли я следовать этой конвенции?
Придает ли каркас какой-то особый смысл .cshtml
файлу, который начинается с подчеркивания?
asp.net
asp.net-mvc-3
razor
richb
источник
источник
Ответы:
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) , Вот почему имеет смысл называть макет и частичные файлы символом подчеркивания в начале приложения Razor Pages, если они не предназначены для просмотра.источник
Вот как это делает Ruby on Rails (Partials начинается с _, но вызов Render Partial не включает _), и ASP.net MVC черпал из этого вдохновение.
На самом деле никаких технических причин, просто соглашение, которое четко показывает намерение других разработчиков (и вас самих через 6 месяцев) сказать: это частичное мнение.
источник
System.Web.HttpNotFoundHandler
для них).Страницы, которые не могут быть показаны прямыми запросами вашего браузера (главные страницы, частичные просмотры и т. Д.), Имеют подчеркивание (_) в начале своих имен.
Поэтому, если вы попытаетесь сделать запрос к _Layout.cshtml (это главная страница), вы получите сообщение об ошибке от сервера.
Это способ отличить файлы, которые нельзя просматривать как отдельные страницы, в Razor View Engine.
Подумайте об этом так ... в MVC 2 ... вы бы различали частичное представление и мастер-сайт с помощью суффикса .master, .ascx, а обычные страницы - .aspx, с другой стороны, в виде Razor ... все представления являются .cshtml, поэтому для различения частичных и главных страниц у них будет префикс (_). нет ничего обязательного, просто "конвенция".
источник
Насколько я знаю, это просто соглашение, используемое для определения цели файла; Я не верю, что это на самом деле изменит поведение файла. В большинстве контекстов разработки добавление подчеркивания идентифицирует что-то, что должно быть предназначено для «частного» использования, будь то класс или, в данном случае, другой шаблон.
источник
Я не использую MVC, но на веб-страницах, которые также используют синтаксис бритвы, префикс _ обычно указывает на то, что страница предназначена не для доступа пользователя, а для других страниц или некоторого кода. Если вы попытаетесь перейти на страницу, содержащую _prefix, asp.net заблокирует доступ к ней. Вот почему он используется со страницами макета и другими подобными страницами, поскольку пользователь не должен получать к ним прямой доступ.
Что-то вроде папки App_Code в asp.net
источник
/view
в проекте ASP.NET MVC по умолчанию;/views/web.config
файл создан , чтобы предотвратить его. Но ничто не мешает возврату действия контроллера.View("_Index", model);
Он работает просто отлично; Я просто сделал это, изменив имя представления на _Index.cshtml и изменив действие для вызова, как я делал выше.