Работаете с данными, не относящимися к 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();