Umbraco SurfaceController vs rendermvcc控制器

Umbraco SurfaceController vs rendermvcc控制器,umbraco,Umbraco,目的是什么?我应该在什么时候使用SurfaceController vs RenderMVCC控制器?似乎我真的不能用SurfaceController做任何事情,我不能用RenderMvcController做任何事情。例如,我特别考虑处理表单提交。使用RenderMVCC控制器,我可以执行以下操作: public class HomeController : RenderMvcController { private IUmbracoMapper _umbracoMapper;

目的是什么?我应该在什么时候使用SurfaceController vs RenderMVCC控制器?似乎我真的不能用SurfaceController做任何事情,我不能用RenderMvcController做任何事情。例如,我特别考虑处理表单提交。使用RenderMVCC控制器,我可以执行以下操作:

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节点映射到视图模型,并将其传递到我的视图?为什么和什么时候我应该使用表面控制器


如果我愿意的话,我可以使用RenderMvcController劫持给定节点的每条路由,让我对应用程序有更多的控制,有点像纯ASP.NET MVC应用程序。这是件好事吗?

来自官方文件:

地面控制器

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

资料来源:

自定义控制器

默认情况下,所有前端路由都是通过 Umbraco.Web.Mvc.renderMVC控制器索引操作应该起作用 对大多数人来说很好。然而,在某些情况下,人们可能希望完成 控制此执行,并且可能希望执行自己的操作。 这样做的一些原因可能是:精确控制视图的显示方式 特定页面/模板的呈现、自定义/细粒度安全性或 能够在控制器中执行呈现 前端。好消息是这是完全可能的。这 这个过程是关于惯例的,非常简单

资料来源:

这有用吗?不过你说得对,我认为Surface控制器唯一的真正区别是自动布线


西蒙

区别主要在于使用意愿。你会发现,在大多数情况下,这两种方法中的任何一种都有效

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

RedirectToCurrentUmbracoPage(...)
RedirectToUmbracoPage(...)
RenderMvcController公开WebSecurity类型的安全属性,在某些情况下可能会有所帮助。有些方法是

IsAuthenticated()
IsMemberAuthorized()
PerformLogin(userID)

谢谢你的回复。在阅读了Sebaastian Janssen在cultiv.nl上关于路线劫持的博客文章后,我开始思考这一点(这条翁布拉科路线劫持是怎么回事?)。我想知道,当您可以用更纯粹的(ASP.NET MVC意义上的)方法实现相同的结果时,为什么要使用SurfaceController。也许没有技术上正确的答案,这是一个偏好的问题。。?