ASP.NET MVC - CMS Вопросы - PullRequest
       5

ASP.NET MVC - CMS Вопросы

2 голосов
/ 14 сентября 2011

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

У меня есть пара вопросов, на которые, я надеюсь, некоторые из вас, ребята, могут ответить:

Во-первых, моя текущая веб-форма CMS позволяет пользователям создавать страницы, а затем «перетаскивать» любое количество пользовательских элементов управления на ту страницу, которую они создали. Я делаю это, чтобы создать запись в БД вместе с путем, а затем использовать метод LoadControl.

Я вижу, что могу сделать это с частичными представлениями, но частичные представления не имеют кода позади. Если у меня потенциально есть 100 элементов управления, которые люди могут перетаскивать на страницу, означает ли это, что ViewBag в контроллере должен обслуживать все 100 элементов управления на тот случай, если они используются в представлении? Например, пользовательский элемент управления веб-форм будет содержать логику: rptItems.DataSource = blah; rptItems.DataBind ()

С MVC я предполагаю, что логика будет в контроллере представления, и представление получит к нему доступ через ViewBag? Я немного запутался в том, как это сделать.

Во-вторых, как бы вы справились с глубокой маршрутизацией?

EG:

Магазин / Продукты / Категория в порядке, но как насчет Магазина / Продукты / Категория / Доставка / Великобритания? Нужно ли мне настраивать маршрут в global.asax для каждого нужного мне маршрута? В веб-формах я просто вызывал метод ReWritePath и сам обрабатывал маршрутизацию с помощью регулярных выражений.

Спасибо, что нашли время прочитать это и, надеюсь, ответьте на некоторые мои вопросы

1 Ответ

2 голосов
/ 14 сентября 2011

Что касается вашего второго вопроса (т. Е. «Глубокая маршрутизация»), вы можете справиться с этим в своем контроллере вместо добавления реальных маршрутов.Каждая часть URL доступна через коллекцию RouteData.Values внутри действия вашего контроллера.Таким образом, ваш маршрут может выглядеть следующим образом:

~/Store/Products/Category/{*params}

Если предположить типичную конфигурацию маршрута, это вызовет метод действия Category(...) для ~/areas/store/controllers/storeController, который может затем захватить delivery и uk из RouteData.Values collection.

Есть много других подходов к этому - сохранение маршрутов в базе данных и использование связанных метаданных для поиска правильного контроллера и метода - но я думаю, что это самый простой.Кроме того, это может быть очевидно, но если в вашем примере вам действительно нужны только два параметра, помимо «Категория», вы можете просто использовать

public ActionResult Category(string category, string region)
{
...
}

и маршрут:

~/store/{controller}/{action}/{category}/{region}/{*params}

Delivery и UK будут сопоставлены с параметрами категории и региона, соответственно.Все, что находится за пределами uk, все еще будет доступно через коллекцию RouteData.Values.Это предполагает, что у вас нет более конкретных маршрутов, таких как

~/store/{controller}/{action}/{category}/{region}/{foo}/{bar}/{long_url}/{etc}

, которые были бы более подходящими.({* params} может конфликтовать со вторым маршрутом; вам придется выяснить, не является ли это проблемой.)

Для вашего первого вопроса:

Вы можете динамически генерировать источник представленияи вернуть его как строку из контроллера, избавляя от необходимости передавать много вещей через ViewBag.Если виртуальная страница из вашей базы данных CMS требует включения частичных представлений, вы должны добавить ссылки на эти компоненты при создании страницы.(Это может или не может решить вашу проблему - если нет, пожалуйста, предоставьте больше информации.)

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