MVC Куда положить файлы просмотра компонентов - PullRequest
0 голосов
/ 20 мая 2019

Вопрос о структуре проекта.Пока у меня есть 3 ViewComponents в приложении .NET Core.

На странице Microsoft о View Components они используют пространство имен ViewComponentSample.ViewComponents, но на практике движок ищет View Components в

  • / Pages / Components / ProductBox / Default.cshtml
  • / Pages / Shared / Components / ProductBox / Default.cshtml
  • / Просмотры / Shared / Components / ProductBox / Default.cshtml

Что означает: создание папки ViewComponents рядом со страницами / представлениями / моделями не будет работать, поскольку она не найдет их.

Так что это означает, что я помещаю их в страницы/ Поделился, правильно?В то время как частичные представления начинаются с "_", я должен оставить это для ViewComponents?

В настоящее время я поместил его в Pages \ Shared \ ProductBox, с представлением в Pages \ Shared \ Components \ ProductBox \ Default.

Тогда остается еще 2 вопроса.Пространство имен и расположение модели.

Этот ProductBox должен находиться в пространстве имен MyWebsite.Pages.Shared или в пространстве имен MyWebsite.ViewComponents?

Что касается модели, я должен поместить ее в папку Modelsили рядом с View Component, так как это код, непосредственно связанный с ним?Мне не нравится разбивать компонент на 3 папки (ViewComponent, Components \ ProductBox и Models).Кажется немного странным, что там есть ProductBox, но это похоже на страницы, рядом с которыми есть свои модели.

И для модели, связанной с компонентом просмотра, пока у меня есть 3 компонента, которые используют свои модели совершенно по-разному.

  • LatestArticlesViewComponent: класс RssItem определен как подкласс и возвращается их список.
  • CoachingFormViewComponent: модель получает форму PageModel, а ViewComponent не делает ничего, кроме передачи модели страницы вView.
  • ProductBoxViewComponent: model - это класс POCO, инициированный ViewComponent со свойствами отображения.

(сначала я передавал класс ViewComponent в качестве модели для представления, но этобыл запах кода, поэтому я изменил его, чтобы использовать отдельный класс модели)

Я делаю это правильно?Я сделал успехи, но хочу убедиться, что я на правильном пути.

1 Ответ

0 голосов
/ 20 мая 2019

Честно говоря, все это не имеет значения. Вы можете положить все, что вы хотите. Представления для компонентов, по соглашению, должны быть в {Views,Pages}/Shared/Components. Часть пути Views / Pages зависит только от того, используете ли вы Razor Pages или MVC-представления, и даже в этом случае вам не нужна дополнительная папка. По умолчанию в Razor Pages нет папки Views, а в MVC по умолчанию нет папки Pages. Тем не менее, вы можете использовать Razor Pages и MVC в одном проекте, и, следовательно, теоретически могут иметь оба каталога. В этом случае, где вы размещаете свои компоненты, это полностью суждение. Однако, помимо всего этого, вы можете изменить эти соглашения или напрямую ссылаться на представления из вашего компонента. В любом случае, представления компонентов могут идти куда угодно. Это полностью зависит от вас.

Фактические компоненты представления в основном одинаковы. Соглашение заключается в том, чтобы поместить их в папку с именем ViewComponents, но это совершенно необязательно. ASP.NET Core втягивает их через отражение, поэтому фактическое местоположение вообще не имеет значения, ни пространство имен. Пространства имен еще более нематериальны, так как здесь они вообще не имеют значения. Вы можете следовать соглашению о том, где находится файл, или использовать что-то еще целиком.

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