Какой должна быть структура файла / каталога представления в ASP.NET MVC?

Я не понимаю, как организованы представления, и это важно понимать, поскольку ASP.NET MVC использует соглашения, чтобы все работало правильно.

В каталоге представлений есть подкаталоги. Внутри этих подкаталогов находятся представления. Я предполагаю, что подкаталоги сопоставляются с контроллерами, а контроллеры действуют на представления, содержащиеся в их подкаталогах.

Возникает ли ожидание относительно того, какие типы представлений содержатся в этих каталогах? Например, должна ли страница по умолчанию для каждого каталога быть index.aspx? Должны ли страницы следовать соглашению об именах, например Create [controller] .aspx, List [controller] .aspx и т. д.? Или все равно?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
8
0
1 950
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Именование каталогов представления и именование файлов важны, потому что платформа ASP.NET MVC делает определенные предположения относительно них. Если вы не согласны с этими предположениями, вы должны написать код, чтобы фреймворк знал, что вы делаете. Вообще говоря, вам следует придерживаться этих предположений, если у вас нет веской причины не делать этого.

Давайте посмотрим на простейшее возможное действие контроллера:

    public ActionResult NotAuthorized()
    {
        return View();
    }

Поскольку в вызове View () не было указано имя представления, структура будет предполагать, что имя файла представления будет таким же, как имя действия. Фреймворк имеет тип ViewEngine, который предоставляет расширение. ViewEngine по умолчанию - это WebFormViewEngine, который примет это имя и добавит к нему .aspx. Таким образом, полное имя файла в этом случае будет NotAuthorized.aspx.

Но в какой папке будет находиться файл? Опять же, ViewEngine предоставляет эту информацию. С WebFormViewEngine он будет искать в двух папках: ~ / Views / Shared и ~ / Views / {controller}.

Итак, если бы ваш контроллер назывался AccountController, он выглядел бы в ~ / Views / Account

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

    public ActionResult NotAuthorized()
    {
        return View("Foo");
    }

Обратите внимание, что в WebFormViewEngine «имя представления» обычно совпадает с именем файла, за вычетом расширения, но структура не требует имени других механизмов представления.

Точно так же у вас может быть причина, по которой ваше приложение должно искать представления и папки, отличные от стандартных. Вы можете сделать это, создав свой собственный ViewEngine. Я показываю эту технику в это сообщение в блоге, но имена типов другие, поскольку она была написана для более ранней версии фреймворка. Однако основная идея осталась прежней.

Могут ли папки в представлении иметь подпапки? если да, то как Контроллер их достает? Например ... Admin / Profile / Edit / 1

Papa Burgundy 10.02.2009 19:46

Для этого вам придется написать свой собственный ViewEngine. WebFormViewEngine их не найдет.

Craig Stuntz 10.02.2009 22:11

@Eric Настройка ViewLocationFormats в экземпляре механизма представления веб-формы - это все, что необходимо для включения размещения представлений во вложенных папках.

bzlm 15.09.2010 11:02

Что касается ожидаемых имен для представлений, я думаю, что это одна из тех вещей, которые каждый проект или организация попытается стандартизировать.

Как вы намекали в своем вопросе, возможно, что некоторые из этих представлений (или, точнее, действия, которые их отображают) станут популярными по всем направлениям, как, например, приведенные ниже, которые распространены в приложениях RoR, которые принимают парадигму REST:

  • / orders / (т.е. индекс)
  • / orders / show / 123
  • / orders / edit / 123
  • / orders / update / 123
  • / orders / new
  • / orders / create
  • / заказы / уничтожить / 123

Выбор / стандартизация представлений во многом зависит от того, как вы моделируете свое приложение (чтобы сказать очевидное) и насколько детализированным вы хотите идти. Чем ближе вы сопоставляете свои контроллеры с отдельными классами моделей (кашель ... ресурсы ... кашель), тем короче будут ваши действия, и вам будет легче следовать стандартному набору действий (как в приведенном выше примере ).

Я также считаю, что более короткие действия помогают внедрять все больше и больше бизнес-логики модели в сами модели, где она и принадлежит.

Другие вопросы по теме