Как назвать Asp.net Mvc контроллеры? - PullRequest
0 голосов
/ 20 августа 2009

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

Например, в этом сценарии у меня есть контроллер входа в систему.

этот контроллер будет иметь

1. Login view
2. RestPassword view
3. CreateAccount view

Поэтому, если они нажимают на кнопку входа, они переходят на другой контроллер (назовем его AccountController), так что в нем будет все представление учетной записи и прочее.

А как насчет представления RestPassword? Когда он упускает пароль пользователя, я хочу, чтобы он перешел на страницу, которая показывает им, что это был успех (большинство сайтов, кажется, делают это, например, сайт asp.net, если вы введете адрес электронной почты, он перейдет на другую страницу и сообщит Вы, что новый пароль был отправлен).

Так что теперь это должен быть другой взгляд? контроллер?

Если это вид, то путь будет выглядеть как

http://www.site.com/signIn/EmailForgottenPassword

что выглядит странно для меня.

Если я сделаю новый контроллер, тогда у меня будет

http://www.site.com/EmailForgottenPassword

Что выглядит для меня лучше, но у этого контроллера будет только один вид.

Другим примером на этой странице sigIn будет кнопка «Создать учетную запись». Теперь при нажатии это переходит на другую страницу, которая имеет список различных учетных записей.

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

так было бы похоже SignController -> RegistrationController -> RegistrationController.

это, вероятно, получит несколько хороших ссылок.

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

Так что я должен что-то упустить.

Ответы [ 3 ]

4 голосов
/ 20 августа 2009

Правда в том, что вам никогда не нужно более одного контроллера. Отдельные контроллеры - это просто способы разделения ваших забот. Другими словами, парадигмы разработки ОО побуждают нас логически разделять наш код на модули, но у вас нет - все может быть в одном контроллере.

То, что вам нужно нужно, это отдельное действие контроллера для каждого типа запроса, который вы хотите обработать. То есть вам нужен метод контроллера, доступный для таблицы маршрутизации, который можно вызвать, введя некоторый URL и / или предоставив некоторые данные GET или POST. Затем этот метод решает, что показывать пользователю (представление).

Кроме того, вы можете иметь любой URL-адрес, на который хотите указать любой контроллер или действие контроллера, которое вы хотите, изменив таблицу маршрутизации в Globals.asax.

У вас, вероятно, есть более конкретные вопросы о моем ответе - пожалуйста, опубликуйте их, и я отредактирую их.

2 голосов
/ 20 августа 2009

В вашем конкретном случае вам достаточно одного контроллера. Я бы назвал его AccountController и добавил к нему следующие действия.

  • Войти * * 1004
  • Выход
  • Создать
  • CreateConfirmation
  • ResetPassword
  • ResetPasswordConfirmation

, а затем для экранов подтверждения, которые вы хотите использовать, вы можете использовать шаблон Post Redirect Get (PRG) .

относительно именования. В общем, вы хотите использовать существительное для контроллера и глаголы для действий на этих контроллерах. Таким образом, вы получите хорошие читаемые URL, которые имеют смысл. А для существительного вы можете выбрать логический / бизнес-термин (лучше, чем технический), с которым имеет дело контроллер. Итак, аккаунты, клиенты, продукты, посты в блогах и т. Д. *

0 голосов
/ 20 августа 2009

Если вы следуете ТВЕРДЫМ принципам, вам следует назвать их очень конкретно. Если вы используете ASP.NET MVC 2, я бы поместил основные виджеты в «области», а затем дал бы хорошие имена контроллерам. Сделайте ваши URL счастливыми!

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