我已经运行了一个Umbraco v7网站大约3年。传统上我没有使用控制器渲染任何页面,但我设置了一些控制器,我将POST形成,但这是关于它。我现有的View页面都有逻辑,并使用外部辅助方法而不是控制器。
我即将开发一个新页面,并认为这是我测试更好的设计模式的时候。此页面将通过控制器呈现来自控制器的数据以及所需的表单提交。如果我决定在现有的View页面上进行重构,那么最佳路线是什么?
我更专注于寻找Render vs Surface控制器的答案,哪一个会更好。我的理解是,如果我使用Render控制器,我的路由将会保持不变,但如果我使用表面,我会必须有特殊的路由?
但如果我使用渲染控制器,这不支持表单提交?
不确定我还缺少什么?
再次感谢, 德文
答案 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);
}
}