Umbraco SurfaceController与RenderMvcController

Iai*_*ain 14 umbraco

目的是什么,何时应该使用SurfaceController vs RenderMvcController?似乎我无法用SurfaceController做任何事情,我无法用RenderMvcController做.例如,我特别考虑处理表单提交.使用RenderMvcController,我可以:

public class HomeController : RenderMvcController
{
    private IUmbracoMapper _umbracoMapper;

    public HomeController()
    {
        _umbracoMapper = new UmbracoMapper();
    }

    [HttpGet]
    public ActionResult Home()
    {
        HomeViewModel viewModel = new HomeViewModel();

        _umbracoMapper.Map(CurrentPage, viewModel);

        return CurrentTemplate(viewModel);
    }

    [HttpPost]
    public ActionResult Home(HomeViewModel viewModel)
    {
        // Handle form submission
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎更符合MVC,特别是因为我可以使用像UmbracoMapper这样的包来将当前的Umbraco节点映射到视图模型并将其传递给我的View?为什么以及何时应该使用SurfaceController?

如果我如此倾向,我可以使用RenderMvcController劫持给定节点的每个路由,让我更好地控制我的applciation,更像是一个纯ASP.NET MVC应用程序.这是一件好事吗?

Pro*_*ion 7

从官方文档:

表面控制器

SurfaceController是一个MVC控制器,它与UmbracoPage的前端渲染进行交互.它们可用于呈现Child Action内容,用于处理表单数据提交和呈现Child Action宏.SurfaceControllers是自动路由的,这意味着您不必为这些控制器添加/创建自己的路由.

资料来源:http://our.umbraco.org/documentation/Reference/Templating/Mvc/surface-controllers

自定义控制器

默认情况下,所有前端路由都是通过Umbraco.Web.Mvc.RenderMvcController索引操作执行的,该操作适用于大多数人.但是,在某些情况下,人们可能希望完全控制此执行,并可能希望自己的Action执行.其中一些原因可能是:准确控制视图的呈现方式,某些页面/模板的自定义/粒度安全性,或者能够在呈现前端的控制器中执行任何自定义代码.好消息是,这是完全可能的.这个过程都是关于惯例的,而且非常简单!

资料来源:http://our.umbraco.org/documentation/Reference/Templating/Mvc/custom-controllers

这有帮助吗?你是对的,我认为Surface控制器的唯一真正区别是自动路由.

西蒙