将MVC应用程序迁移到Sitecore解决方案时,您有几个选项可用 - 根据要迁移的组件的性质,您将不得不选择最合适的选项。
我会尽力解决您的5个具体的问题:
1.当使用剃刀意见
我不知道,如果问题是“何时使用Razor视图”或如果问题是“何时使用Sitecore View Rendering” - 我将假设后者。
查看如果您正在编写不需要任何业务逻辑并仅处理呈现项目的演示组件,则呈现功能非常棒。如果您正在考虑在Razor视图中添加代码,则应该考虑控制器渲染是否更合适,或者可以自定义管道mvc.getModel
。
2.迁移陷阱
一些迁移MVC应用程序Sitecore的时候可能会抓住你出了事情。
- 基于组件的控制器 - 在MVC中,每页有一个控制器。 Sitecore支持ControllerRenderings的概念,允许您在一个页面上拥有多个控制器(注意:总是会有一个路由控制器可以被视为主要的)。
- 项目路由 - Sitecore有一个捕捉所有路径,对映射到项目路径的所有路径都有效。标准的MVC路线和“项目路线”可以愉快地共存。物品路线当前不支持路线参数(例如,您无法在物品路线上指定{动作}或其他参数)。
- MVC4 - 目前没有官方支持MVC4(这不会持续很长时间 - 但在此期间看看http://herskind.co.uk/blog/2012/10/sitecore-66-mvc4)
- 区域 - 当前区域未得到完全支持。
- 不知道使用哪种呈现类型以及何时将现有功能转换为组件。
3.管道定制
你是不是被迫定制Sitecore的管道。我可以看到一些例子,在迁移故事的上下文中修改管道是有用的。我最近在Sitecore用户组中谈到的一个例子涉及在全球范围内添加一个ActionFilter
(通过mvc.resultExecuting
管道),将一个ASP.Net MVC应用程序注入Sitecore占位符。在我的示例中,我将MVC音乐商店注入占位符并拥有Sitecore控件窗口打扮(页眉/页脚/菜单)。通过这种方式,我可以将现有的MVC应用程序放入Sitecore中,而无需进行太多改动。
4.导航链接
如果您的导航终端是Sitecore的项目路线(E.I.网站上的路径中的项目),你应该使用Sitecore的LinkManager
产生相应的链接。如果端点是标准MVC路线RouteLink
和ActionLink
应该可以正常工作。
我想没有一个具体的例子,答案将是“也许”。
5.最佳实践迁移的博客文章
我不知道处理Sitecore的MVC迁移最佳实践的任何博客文章或文章。请记住,完整的MVC支持是Sitecore的最新增加,而且从开始到结束的这段旅程并不多。
为什么以及何时转换为Sitecore的渲染
您终止的问题,说明你仍然感到困惑的时候,为什么你会控制和剃刀意见转化为Sitecore的效果。以下是一些指标,说明某些是Sitecore呈现的候选对象:
- 它是一个可以在多个页面上重用的组件。
- 您希望启用Sitecore用户将组件添加到页面。 (认为页面编辑器)
- 您想利用Sitecore的组件级缓存。
- 您希望利用Sitecore安全来限制谁可以使用/查看组件。
- 你想通过个性化,规则或者运行MVT来控制组件。
在MVC的情况下这里有一些指标,它可能不适合的东西转换成Sitecore的渲染:
我相信很多在这个答案的要点可以在扩大,我知道有这个没有明确的规则 - 但我希望这个答案可以帮助清理一些混乱...
+1 - 不确定它是否是'最佳实践',或者它只是第一篇尝试使用它的博客文章,但这里有一篇关于如何将MVC音乐商店教程网站转换为Sitecore MVC的文章。 http://www.sitecore.net/Community/Best-Practice-Blogs/Chris-van-de-Steeg/Posts/2012/08/MVC-Controller-Renderings-for-Sitecore.aspx – 2013-03-12 12:22:30
我Chris的博文认为这是一个很好的例子,说明如何使用Sitecore MVC的不同方面。但是,如果情况是,您开始使用“MVC音乐商店”应用程序,并且您想将其合并到Sitecore解决方案中,那么我可能不会为了在Sitecore中对其进行重新组合而将其纳入其中。有些组件适合成为Sitecore渲染比其他组件。 – herskinduk 2013-03-12 12:51:11