2013-08-19 4 views
0

Я следил за этим хорошим учебным пособием, в котором объясняется, как можно использовать еще большее преимущество использования Umbraco в качестве системы доставки контента. Tutorial MVC Umbraco => Ваша модель и представления не должны зависеть от конкретных реализаций Umbraco, что является огромным преимуществом для реальных разработчиков интерфейсов.Реализация Umbraco MVC - вид не зависит от реализаций Umbraco

Контроллер унаследован от Umbraco.Web.Mvc.RenderMvcController для доступа к данным из CMS. Теперь моя проблема в том, что мы не можем использовать @ HTML.actionlink для навигации, похоже, что это поддерживается только в SurfaceController.

Теперь мой вопрос заключается в том, как реализовать навигацию внутри Umbraco.Web.Mvc.RenderMvcController? Можем ли мы по-прежнему использовать собственный тег @ HTML.actionlink?

ответ

1

Нет, вы не можете. Просто потому, что все запросы проходят через одно действие. Чтобы получить путь к странице, управляемой CMS, вам необходимо использовать обход узла/содержимого, который предоставляет @Model. См. Здесь more details.

Редактировать

Чтобы уточнить, автор статьи предполагает, что реализация Umbraco должна быть больше в соответствии с традиционной реализации MVC практически без логики во взглядах. Поэтому любые запросы данных узла должны выполняться до представления (например, в Mappers). Таким образом, вы должны будете восстановить ссылки.

Реализация MVC по умолчанию MVC Umbraco заставляет все запросы проходить через одно действие на одном контроллере. Реализация автора позволяет передавать запросы по одному контроллеру на один тип документа, что лучше ИМО. Но это все равно означает, что такие вещи, как Html.ActionLink, избыточны в представлениях, поскольку на странице не действует.

Далее редактировать

Если вы хотите, чтобы создать список навигации с комбинацией Umbraco управляемых страниц и не-Umbraco страниц, независимо от реализации, я бы:

  1. Создать действие ребенка и представление для навигации в отдельном NavigationController, которое наследуется от SurfaceController
  2. Используйте имущество this.CurrentPage унаследованного SurfaceController, чтобы пройти по Умбе raco content cache для извлечения соответствующих страниц, управляемых Umbraco. Затем вы можете использовать свойство Url каждого результата страницы, чтобы получить его путь, и свойство Name, чтобы получить заголовок страницы
  3. Используйте this.Url.Action("action", "controller") для получения путей к определенным действиям, отличным от Umbraco. В качестве альтернативы, если страницы управляются базой данных, используйте этот слой данных (например, EF, NHibernate, PetaPoco) в этот момент
  4. Объедините их в словаре, чтобы составить нужный вам список, где Key - это путь, а Value - это название страницы
  5. Передайте это вниз, чтобы посмотреть как модель представления.

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

+0

Тогда я действительно не понимаю значение учебника в своем оригинальном посте. Вы должны использовать инструмент Umbraco для создания веб-сайта. Я не вижу никакой дополнительной пользы от использования внешней среды IDE, такой как визуальная студия. Также реальный шаблон MVC скрыт для разработчика, под капотом umbraco использует MVC, но вы не можете сказать, что вы развиваетесь, как описывает шаблон MVC. – JVGAG

+0

Ну много сайтов не только о содержании, но и данных. Представьте себе торговый сайт или сайт инвестиционных фондов. Эти сайты нуждаются в контенте, но почти все их данные поступают из каталогов или источников данных. Поэтому часто бывает, что вы будете использовать Umbraco в качестве основы для своего сайта и иметь дополнительные контроллеры, отличные от Umbraco, представления и т. Д., Выводящие данные, не связанные с CMS. Я понимаю, откуда эта статья, но для небольших сайтов, ориентированных на контент, подход может быть чрезмерным. – Digbyswift

+0

Но как я должен осуществлять навигацию между контроллером umbraco (rendermvccontroller) и контроллером non umbraco? – JVGAG