Umbraco 7中的表面控制器或自定义控制器?

Chr*_*son 11 c# asp.net-mvc umbraco umbraco7

历史

我是一名Web Forms开发人员,拥有一些.NET MVC经验,对Umbraco来说是新手,并且在我学习的过程中学习.

到目前为止,我一直在关注Umbraco文档和视频以进行设置,这意味着我的所有控制器都继承了包含常用功能的"Controller Base",它本身继承自SurfaceController.

最近,我注意到一些博主和外部参考资料引用了基类中的RenderMvcController而不是SurfaceController - 现在Umbraco文档还不清楚两者之间的真正差异,以及你应该使用它们的情况.

问题

Surface控制器的想象使用场景(从Umbraco.Web.Mvc.SurfaceController继承)和自定义控制器(从Umbraco.Web.Mvc.RenderMvcController继承)之间是否有明显的区别?

谢谢!

Dig*_*ift 17

该文件的文件在SurfaceController这里:http://our.umbraco.org/documentation/Reference/Templating/Mvc/surface-controllers

简而言之,SurfaceController它用于帮助与视图交互.例如,您可以将表单发布到表面控制器.或者您可以使用a将视图写入子视图SurfaceController

RenderMvcController纯粹用于路由到已发布的页面.因此,您可以进行子类化RenderMvcController以"劫持"对特定文档类型的已发布页面的请求.请参见http://our.umbraco.org/documentation/Reference/Templating/Mvc/custom-controllers.

  • 是的_can_是但不应该,因为为此目的有'UmbracoApiController`.表面控制器的两个主要目的是形式交互和子动作. (4认同)

Ric*_*lay 7

根据Digbyswift的答案进一步澄清:

SurfaceController = API或表单目标(然后重定向)

RenderMvcController =用于构建模型的自定义逻辑或为内容项选择视图(基于文档类型和(可选)模板)

  • 虽然你是对的,它可以用于API,我个人不会推荐它.Umbraco专门为此提供了"UmbracoApiController".与使用SurfaceController相比,此方法的开销更小.此外,使用表面控制器将所有API代码整合到MVC特定的表单处理和子操作代码中,我个人认为这些代码并不好.然后也可以为API定义单独的路由. (9认同)