Работаете с данными, не относящимися к Umbraco, в проектах MVC и Umbraco?

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

Мой вопрос: как мне работать с типами, которыми я не хочу управлять через бэк-офис Umbraco? Скорее, это будут простые данные, поступающие и хранящиеся в SQL Server.

В частности, я хочу спросить:

  • Могу ли я создать контроллер в MVC и обойти Umbraco?
  • От каких контроллеров нужно наследовать? Должны ли они быть стандартным контроллером MVC, SurfaceController или же RenderMvcController? Опять же, это не будет тип или данные документа Umbraco.
  • Будут ли виды наследоваться от UmbracoViewPage, UmbracoTemplatePage или это может быть стандартное представление MVC?
  • Как изменится URL этих представлений, контроллеров и действий? В Umbraco, URL-адрес зависит от дерева контента, но как это будет с не-Umbraco контроллерами, представлениями и действиями?

Большое вам спасибо за ваше драгоценное время, руководство, обмен и помощь; Я высоко ценю это.

1 ответ

Решение

Вы задаете много разных вопросов здесь.

При разработке с Umbraco Umbraco весьма обычно встраивать внешние данные в ваш сайт. Если мы уже сказали вам, что вы можете использовать (почти) любой тип доступа к данным, который вы используете в простых проектах.Net.

Не теряйте свой контекст Umbraco

При извлечении внешних данных (например) продуктов важно, чтобы вы не потеряли свой контекст umbraco. У вас все еще есть крошка для рендеринга, классы CSS для активных меню и так далее. Ваши "внешние данные" принадлежат, вероятно, ниже узла. Поэтому плохая идея использовать стандартные контроллеры MVC.

Грязная бритва

Поскольку ваши представления находятся в опасном состоянии, вы МОЖЕТЕ поместить каждое извлечение внешних данных в @{ ... } в своем представлении. Если вы не опытный программист, это работает. Хотя темы о техобслуживании и принципах DRY сомнительны:-)

RenderMvcController против SurfaceController

Когда вы используете RenderMvcController, вы в основном создаете контроллер для определенного типа документа. Каждый раз, когда umbraco рендерит узел этого типа документа. Этот контроллер будет вызван, и модель, которую вы отображаете, отправляется обратно в представление. Как вы можете догадаться, это одно из моих любимых мест для извлечения данных и вывода их на экран. Поверхностный контроллер, с другой стороны, является контроллером для частичного обзора, очень хорошо работающего в обратной передаче. Оба эти контроллера могут использоваться для внешнего интерфейса вашего сайта, а не для внутреннего интерфейса.

Наследуй свои взгляды

Вы можете делать со своими взглядами то, что вы хотите. Но если вы унаследуете свое представление от UmbracoViewPage, у вас все еще есть все @Umbraco.Whatever сила в ваших взглядах

Ваши URL остаются прежними

Поскольку вы "перехватываете" маршрут с помощью RenderMvcController, вы можете просто доверять бэкэнду umbraco, чтобы перейти по нужному URL. Строка запроса может быть использована для получения необходимых внешних данных.

Другие контроллеры или методы

Иногда, если я не могу использовать вышеуказанный контроллер, я создаю метод extentionMethod для IPublishedContent. Вот так я могу написать такой код:

foreach (var myObj in Model.Content.GetMyExternalData()) {
   // do stuff
}

Если вам необходимо предоставить данные (используя оболочку webApi), попробуйте UmbracoApiController. Этот REST чистый пел.

Доступ к данным в umbraco

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

var query = new Sql().Select("*").From("myCustomTable").Where<MyModel>(x => x.Id == id);
return DatabaseContext.Database.Fetch<MyModel>(query).FirstOrDefault();
Другие вопросы по тегам