如何重构Umbraco以渲染控制器

时间:2016-12-12 23:44:52

标签: asp.net-mvc umbraco umbraco7

我已经运行了一个Umbraco v7网站大约3年。传统上我没有使用控制器渲染任何页面,但我设置了一些控制器,我将POST形成,但这是关于它。我现有的View页面都有逻辑,并使用外部辅助方法而不是控制器。

我即将开发一个新页面,并认为这是我测试更好的设计模式的时候。此页面将通过控制器呈现来自控制器的数据以及所需的表单提交。如果我决定在现有的View页面上进行重构,那么最佳路线是什么?

我更专注于寻找Render vs Surface控制器的答案,哪一个会更好。我的理解是,如果我使用Render控制器,我的路由将会保持不变,但如果我使用表面,我会必须有特殊的路由?

但如果我使用渲染控制器,这不支持表单提交?

不确定我还缺少什么?

再次感谢, 德文

1 个答案:

答案 0 :(得分:2)

您不必配置任何特殊路由 - 所有内容都直接放入Umbraco。

根据经验,Surface控制器最适合用于可重复使用的操作,自定义控制器(Route Hijacking)更适合在Umbraco中向整个页面(文档类型/模板)添加自定义逻辑。

这两种方法都可以让你完成相同的结果 - 它们之间唯一的区别就是抽象。

曲面控制器是从Umbraco.Web.Mvc.SurfaceController继承的MVC Child Actions - 这会添加有用的Umbraco特定属性和方法。

Surface控件适用于创建可重用的东西,如表单或任何需要部分复杂的东西(即由控制器支持)。看看documentation here

当您使用自定义控制器更改页面的呈现方式时,称为路由劫持

要执行此操作,您需要创建自己的控制器,而不是继承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的自定义模型。

富勒示例和documentation can be found here

发布请求

这两个选项都允许您通过添加[httppost]属性来处理POST请求,如下所示:

表面控制器:

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);
    }
}