我正在使用Sitecore 7.5和Sitecore 8(2个具有相同需求的独立项目).我们将内容项存储在存储桶中,但它们本身不是页面项(它们没有绑定到它们的显示,它们只是数据项,可能来自不同的来源,包括项目存储桶).
所以这里是问题的一般布局:我们想要渲染项目的页面类似于 / sitecore/content/home/news 我们需要能够在项目名称之后解析pathinfo作为控制器渲染的数据有效负载.
所以,到目前为止我所尝试的包括创建这些行的自定义路线:
routes.MapRoute(
"Blog",
"blog/{*pathInfo}",
new
{
scItemPath = "/sitecore/content/Home/Blog",
controller = "Blog",
action = "DefaultAction"
});
Run Code Online (Sandbox Code Playgroud)
我从RenderCustomRoutes管道加载路由,并且我已将其配置为在不同的测试尝试中从Sitecore InitializeRoutes管道之前和之后调用.
我在http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2012/10/using-sitecore-keys-in-mvc-routes-with-中引用了这个. -sitecore-aspnet-cms.aspx和一些相关文章.
接下来的一些其他文章,他修改他的指示或继续解决其他问题并没有解决我的情况.问题是,这一切都不起作用.在这种情况下,控制器被正确调用,但是当我在渲染上下文中获取项目本身时,我没有得到页面其余部分的渲染.有没有办法从这里启动渲染管道,或者使用博客项目的其余演示详细信息来组装页面并手动执行?
我试过的另一条路线就是尝试将pathinfo作为数据传递给现有的博客页面网址,但我最终得到的是404.
我不知道我是不是在这里追逐一只雁,而且还有一种更好的方式,或者我只是在某个地方错过了一块.在Webforms中我可能已经完成了url重写以实现这一点而不使用查询字符串,但我希望路由可以设计为处理这样的事情,我看到的文章似乎让我认为它是可能的.
我一直在考虑的其他事情:John West说Sitecore有4种方式来处理MVC请求
1. 忽略请求:允许ASP.NET MVC处理它,就像没有安装Sitecore一样,而不建立Sitecore上下文.
2. 应用路由:使用MVC路由指定的控制器和操作.
3. 应用指定操作:使用上下文项中指定的控制器和操作.
4. 应用视图:使用Sitecore的默认控制器和操作来调用上下文项中上下文设备的布局详细信息中定义的视图.
当我使用自定义路线时,我得到的结果似乎符合#2,但我仍然需要使用自定义路线,更像是#3或#4.