目的是什么?何时使用SurfaceController与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
    }
}


这似乎与MVC保持一致,尤其是因为我可以使用UmbracoMapper之类的包将当前的Umbraco节点映射到视图模型并将其传递给View?为什么以及何时应该使用SurfaceController?

如果我这么想,我可以使用RenderMvcController劫持给定节点的每条路由,从而使我对自己的应用程序有更多的控制权,这有点像纯ASP.NET MVC应用程序。这是一件好事吗?

最佳答案

从官方文档中:

表面控制器


SurfaceController是一个MVC控制器,可与
UmbracoPage的前端呈现。它们可以用于渲染
儿童动作内容,用于处理表单数据提交以及
渲染儿童动作宏。 SurfaceController是自动路由的
这意味着您不必为此添加/创建自己的路线
控制器工作。


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

定制控制器


默认情况下,所有前端路由都是通过
Umbraco.Web.Mvc.RenderMvcController Index操作应该起作用
对大多数人来说很好。但是,在某些情况下,人们可能希望完成
控制此执行,并且可能希望自己执行Action。
造成这种情况的一些原因可能是:精确控制视图的方式
某些页面/模板或
能够在控制器中执行任何自定义代码来呈现
前端。好消息是,这完全有可能。这个
流程全都与约定有关,而且非常简单!


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

有帮助吗?不过,您是对的,我认为与Surface控制器唯一真正的区别是自动布线。

西蒙

10-04 20:14