Asp.net mvc 如何重构Umbraco以渲染控制器

Asp.net mvc 如何重构Umbraco以渲染控制器,asp.net-mvc,umbraco,umbraco7,Asp.net Mvc,Umbraco,Umbraco7,我已经运行了大约3年的Umbraco v7站点。传统上,我没有使用控制器呈现任何页面,但是我设置了一些我将表单发布到的控制器,仅此而已。我现有的视图页面中烘焙了逻辑,并使用外部帮助器方法而不是控制器 我即将开发一个新页面,并认为这将是我测试更好的设计模式的时间。此页面将呈现来自控制器的数据以及通过控制器提交的所需表单。如果我决定对现有的视图页面进行重构,那么进行重构的最佳途径是什么 我更具体地寻找关于渲染与曲面控制器的答案,以及哪一个更好。我的理解是,如果使用渲染控制器,我的布线将保持不变,但如

我已经运行了大约3年的Umbraco v7站点。传统上,我没有使用控制器呈现任何页面,但是我设置了一些我将表单发布到的控制器,仅此而已。我现有的视图页面中烘焙了逻辑,并使用外部帮助器方法而不是控制器

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

我更具体地寻找关于渲染与曲面控制器的答案,以及哪一个更好。我的理解是,如果使用渲染控制器,我的布线将保持不变,但如果使用曲面,我将必须使用特殊布线

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

不知道我还缺什么

再次感谢,
Devin

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

根据经验,曲面控制器最适合用于可重用操作,自定义控制器(路由劫持)更适合将自定义逻辑添加到Umbraco中的整个页面(文档类型/模板)

这两种方法将使您能够实现完全相同的结果-它们之间的唯一区别是抽象

曲面控制器是从
Umbraco.Web.Mvc.SurfaceController
继承而来的-这增加了有用的Umbraco特定属性和方法

曲面控制器适用于创建可重用的对象,如表单或任何需要局部对象来执行任何复杂操作(即由控制器支持)的地方。看一看这张照片

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

为此,您可以创建自己的控制器,而不是继承自
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
继承的自定义模型

更完整的例子和例子

发布请求

这两个选项都允许您通过添加
[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);
    }
}

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

根据经验,曲面控制器最适合用于可重用操作,自定义控制器(路由劫持)更适合将自定义逻辑添加到Umbraco中的整个页面(文档类型/模板)

这两种方法将使您能够实现完全相同的结果-它们之间的唯一区别是抽象

曲面控制器是从
Umbraco.Web.Mvc.SurfaceController
继承而来的-这增加了有用的Umbraco特定属性和方法

曲面控制器适用于创建可重用的对象,如表单或任何需要局部对象来执行任何复杂操作(即由控制器支持)的地方。看一看这张照片

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

为此,您可以创建自己的控制器,而不是继承自
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
继承的自定义模型

更完整的例子和例子

发布请求

这两个选项都允许您通过添加
[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);
    }
}

一些后续问题:因此曲面控制器用于呈现MVC子操作或处理表单数据提交。这是否意味着它不能用于常规视图页面呈现?曲面控制器无法呈现常规视图页?为什么曲面控制器需要路由?表单提交的表面控制器需要路由,但子操作表面控制器呢,为什么需要路由?@DevinGleasonLambert我想你可能对什么是“路由”有点困惑。路由是关于配置在ASP.NET MVC中访问特定URL(或路由)时发生的事情(即使用什么控制器)。就您的问题而言,Umbraco已经为您处理了所有的路由,您所需要做的就是添加相应的控制器。@DevinGleasonLambert正如我所说,两者都将处理POST请求,它们之间的唯一区别是一个更好地处理整页,还有一个更好的方法用于页面的某些部分。下面的问题是:表面控制器用于呈现MVC子操作或处理表单数据提交。这是否意味着它不能用于常规视图页面呈现?曲面控制器无法呈现常规视图页?为什么曲面控制器需要路由?表单提交的表面控制器需要路由,但子操作表面控制器呢,为什么需要路由?@DevinGleasonLambert我想你可能对什么是“路由”有点困惑。路由是关于配置在ASP.NET MVC中访问特定URL(或路由)时发生的事情(即使用什么控制器)。就您的问题而言,Umbraco已经为您处理了所有的路由,您所需要做的就是添加相应的控制器。@DevinGleasonLambert正如我所说,两者都将处理POST请求,它们之间的唯一区别是一个更好地处理整页,另一个更好地处理部分