Umbraco SurfaceController vs rendermvcc控制器
目的是什么?我应该在什么时候使用SurfaceController vs RenderMVCC控制器?似乎我真的不能用SurfaceController做任何事情,我不能用RenderMvcController做任何事情。例如,我特别考虑处理表单提交。使用RenderMVCC控制器,我可以执行以下操作:Umbraco SurfaceController vs rendermvcc控制器,umbraco,Umbraco,目的是什么?我应该在什么时候使用SurfaceController vs RenderMVCC控制器?似乎我真的不能用SurfaceController做任何事情,我不能用RenderMvcController做任何事情。例如,我特别考虑处理表单提交。使用RenderMVCC控制器,我可以执行以下操作: public class HomeController : RenderMvcController { private IUmbracoMapper _umbracoMapper;
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。也许没有技术上正确的答案,这是一个偏好的问题。。?