Umbraco SurfaceController与RenderMvcController

时间:2014-12-16 23:12:07

标签: umbraco

目的是什么,何时应该使用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劫持给定节点的每条路径,让我更好地控制我的applciation,更像是一个纯ASP.NET MVC应用程序。这是件好事吗?

2 个答案:

答案 0 :(得分:7)

来自官方文件:

Surface Controller

  

SurfaceController是一个与之交互的MVC控制器   UmbracoPage的前端渲染。它们可用于渲染   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控制器的唯一真正区别是自动路由。

西蒙

答案 1 :(得分:0)

差异主要在于使用意图。在大多数情况下,你会发现任何一个都可以使用。

如果您在该视图上有一些用户交互,则可以使用Surfacecontroller。如表格提交。它包含一些辅助方法,用于重定向,例如

RedirectToCurrentUmbracoPage(...)
RedirectToUmbracoPage(...)

RenderMvcController公开WebSecurity类型的Security属性,在某些情况下可能会有所帮助。一些方法是

IsAuthenticated()
IsMemberAuthorized()
PerformLogin(userID)