Разработка действий контроллера ASP.NET MVC - PullRequest
9 голосов
/ 27 февраля 2009

Мне действительно нравится, как работает ASP.NET MVC. Я бы хотел внедрить его во все новые веб-проекты, продвигающиеся вперед, но однажды я наткнулся на загвоздку прототипа, для которой я действительно не нашел хорошего решения, поэтому я спрашиваю вас, как бы вы разработали приложение MVC это не соответствует типичному шаблону REST? Например, прототип, который я разрабатывал, имел бы несколько страниц, но сами страницы не обязательно привязаны к модели предметной области. Например, возьмем простой сайт регистрации, который может иметь следующие страницы:

  • / Default.aspx
  • / Register.aspx
  • / ThankYou.aspx

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

  • / Admin / Default.aspx
  • / Admin / ListRegistrations.aspx
  • / Admin / ViewReports.aspx ...

Было бы недопустимым отклонением от шаблона MVC, в этом случае иметь два контроллера, таких как:

  • Home-> Index
  • Главная страница-> Регистрация
  • Главная-> ThankYou
  • Admin-> Index
  • Admin-> ListRegistrations
  • адми-> Отчеты

Мое разочарование по этому поводу усугубляется тем фактом, что пока нет реальной надежной реализации субконтроллеров и областей. Я знаю о прототипе "Области", собранном Филом Хааком, но он не очень зрелый, и, честно говоря, я не уверен, что мне нравится способ его настройки, но я не знаю, как бы я хотел чтобы увидеть эту работу либо.

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

Ответы [ 4 ]

3 голосов
/ 28 февраля 2009

Вы всегда можете смешивать веб-формы ASP.NET с MVC.

Просто добавьте

routes.IgnoreRoute("Pages/{*path}");

в таблицу маршрутизации и добавьте традиционные веб-страницы в папку Pages приложения.

3 голосов
/ 27 февраля 2009

Одна ошибка, которую совершают новички в MVC, заключается в группировке действий в контроллере по причинам отображения. В вашем случае вместо группировки действий Register и ThankYou на домашней странице попробуйте разделить их на AccountController, как это сделала команда MVC в примере проекта. Вы можете использовать маршрутизацию, чтобы настроить URL-адреса, как вы хотите для конечного пользователя.

Что касается других ваших действий, как насчет ReportController? Затем вы могли бы дополнительно иметь AdministrationController, чье действие / представление Index содержит ссылки на различные действия администратора, включая действия в ReportController.

Краткая версия: Группировка действий в контроллере по функциям, а не по навигации сайта.

3 голосов
/ 27 февраля 2009

Обычно я отказываюсь от контроллера «Home» в качестве первого элемента проекта и заменяю его контроллером «Page». Я использую это для всего, что «просто» страница. Такие вещи, как «FAQ», «Contact Us» и т. Д. Я делаю это хотя бы частично, потому что подход по умолчанию к контроллеру Home требует добавления нового метода каждый раз, когда вам нужна даже базовая статическая страница.

В этом контроллере у меня есть только одно действие: Дисплей. Это действие дает всем этим страницам один и тот же объект контекста. Я на самом деле храню контент для этих страниц в базе данных с поиском «slug» и связываю его с шаблонами NVelocity, но даже статические шаблоны HTML или NVelocity в файлах тоже будут работать.

Все остальное, как говорили другие, разделяется на контроллеры управляемой «вещью». Итак, ReportController, User или AccountController, CartController и т. Д. Тогда эти действия имеют гораздо больше смысла.

Когда вы говорите о перечислении зарегистрированных пользователей, на самом деле это список пользователей, поэтому я хотел бы иметь UserController и делать / User / Display / Registered / MostRecent или что-то подобное. Для самой регистрации: / Пользователь / Регистрация, которая будет публиковать в / Пользователь / СохранитьРегистрацию, которая, в свою очередь, может перенаправить оттуда / Пользователь / DisplayProfile / NewUserID или / Page / Display / Home оттуда.

1 голос
/ 27 февраля 2009

Вы можете иметь столько контроллеров, сколько имеет смысл; эта раскладка выглядит разумно. Обратите внимание, что маршруты не имеют для непосредственного сопоставления с {controller} / {action}, но это упрощает задачу. Выглядит хорошо для меня - за исключением того, что у меня, вероятно, есть ThankYou как представление - то есть Регистр [GET], возможно, использует другое представление для Регистрации [POST]

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