Вам не нужно настраивать какую-либо специальную маршрутизацию — все запекается прямо в Umbraco.
Как показывает опыт, контроллеры Surface лучше всего использовать для многократно используемых действий, а настраиваемые контроллеры (перехват маршрута) лучше подходят для добавления пользовательской логики на целые страницы (типы документов/шаблоны) в Umbraco.
Оба подхода позволят вам добиться абсолютно одинаковых результатов — единственное различие между ними — абстракция.
Контроллеры Surface — это дочерние действия MVC, которые наследуются от Umbraco.Web.Mvc.SurfaceController
— добавляет полезные свойства и методы, специфичные для Umbraco.
Поверхностные контроллеры хороши для создания многоразовых вещей, таких как формы или в любом другом месте, где вам нужно частичное выполнение чего-либо сложного (т.е. при поддержке контроллера). Взгляните на документация здесь.
Когда вы используете собственный контроллер для изменения способа отображения страниц, что называется перехватом маршрута.
Для этого вы создаете свой собственный контроллер, а не наследуете его от Umbraco.Web.Mvc.RenderMvcController
следующим образом:
public class HomeController : Umbraco.Web.Mvc.RenderMvcController
{
public ActionResult MobileHomePage(RenderModel model)
{
//Do some stuff here, the return the base Index method
return base.Index(model);
}
}
Это настраиваемый контроллер для типа документа «Домашний». Конечно, вы можете вернуть пользовательскую модель, которая наследуется от RenderModel
, с вашими собственными свойствами и методами.
Более полные примеры и документация можно найти здесь.
Запросы на публикацию
Оба варианта позволяют обрабатывать запросы POST, добавляя атрибут [httppost]
следующим образом:
Поверхностный контроллер:
public class YourSurfaceController: SurfaceController
{
public ActionResult YourAction()
{
// Do stuff
}
[HttpPost]
public ActionResult YourAction()
{
// Do stuff on POST
}
}
Контроллер для перехвата маршрута:
public class HomeController : Umbraco.Web.Mvc.RenderMvcController
{
public ActionResult MobileHomePage(RenderModel model)
{
//Do some stuff here, the return the base Index method
return base.Index(model);
}
[HttpPost]
public ActionResult MobileHomePage(RenderModel model)
{
//Do some stuff on POST, the return the base Index method
return base.Index(model);
}
}
person
Jason Elkin
schedule
13.12.2016