Описание тега surface-controller
Поверхностный контроллер - это контроллер MVC, который взаимодействует с внешним интерфейсом (или рендерингом) Umbraco. Примером контроллера поверхности может быть контроллер с дочерним действием, используемым для отображения ленты Twitter, или контроллер с действием, принимающим некоторую опубликованную информацию из формы. Дочерние действия на контроллере поверхности, вероятно, будут в первую очередь использоваться для макросов дочерних действий в Umbraco v5.
Поскольку контроллеры поверхности являются плагинами, это означает, что вы можете создать пакет, содержащий контроллеры поверхности, чтобы распространять любые функции интерфейса, которые вам нравятся, для разработчиков Umbraco. Поверхностные контроллеры, как и древовидные контроллеры и контроллеры редактора, автоматически маршрутизируются для вас.
Чтобы создать контроллер поверхности для использования в плагине, вы создаете класс в проекте со ссылкой на System.Web.Mvc и Umbraco.CMS.Web со следующей настройкой:
• Наследует от SurfaceController
• Именуется суффиксом "SurfaceController"
• Имеет атрибут класса Surface с уникальным GUID
• Содержит один или несколько методов действия, которые возвращают PartialViewResult или ContentResult и помечены атрибутом [ChildActionOnly]
• Файл AssemblyInfo.cs проекта должен содержать [assembly: AssemblyContainsPlugins]. В противном случае вы используете стандартные концепции MVC, такие как модели представлений и жестко или слабо связанные представления, как автономные, так и встроенные. Вы развертываете в папку вашего пакета, как описано в предыдущем посте.
Использование контроллера поверхности
Существует несколько способов использования контроллера поверхности после его сборки и развертывания в приложении Umbraco.
Одним из них является стандартный способ MVC - в конце концов это просто действие контроллера, возвращающее частичное представление или результат содержимого. Таким образом, вы можете использовать @Html.Action. Поскольку это плагин, который создается как отдельная область, вам необходимо указать область, в которой находится контроллер и действие, следующим образом:
@Html.Action("ActionName","ControllerName", new {area = "PackageName"})
К сожалению, на момент написания статьи это не сработало. Ошибка "Нет маршрута в таблице маршрутов соответствует заданным значениям". Результаты. Надеемся, что разберемся с этим или определим, будет ли это исправлено в ближайшее время.
В любом случае, лучший способ - создать макрос Child Action. Это делается через раздел Developer, и после создания развернутого пакета, контроллер и действие должны быть выбраны из списка. Затем вы можете отобразить макрос, например, в шаблоне с помощью:
@Umbraco.RenderMacro("artistList")