- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Sitecore 7.5 和 Sitecore 8(2 个具有相同需求的独立项目)。我们将内容项存储在存储桶中,但它们本身不是页面项(它们没有绑定(bind)表示,它们只是数据项,可能来自不同的来源,包括项目存储桶)。
所以这是问题的总体布局:我们想要呈现项目的页面会是这样的/sitecore/content/home/news我们需要能够解析项目名称后的路径信息作为 Controller 渲染的数据负载。
因此,到目前为止,我尝试过的包括按照以下方式创建自定义路由:
routes.MapRoute(
"Blog",
"blog/{*pathInfo}",
new
{
scItemPath = "/sitecore/content/Home/Blog",
controller = "Blog",
action = "DefaultAction"
});
我从 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-the-sitecore-aspnet-cms.aspx 引用了这个以及一些相关文章。
按照他修改说明或继续解决其他问题的其他文章并不能解决我的情况。问题是,这些都不起作用。在这种情况下, Controller 被正确调用,但是当我在渲染上下文中获取项目本身时,我没有获得页面渲染的任何其余部分。有没有办法从这里启动渲染管道,或者使用博客项目的其余演示细节组装页面并手动完成?
我尝试过的另一条路线只是试图将路径信息作为数据传递给现有的博客页面 url,但我最终得到了 404。
我不知道我是在追逐野鹅,还有更好的方法,还是我只是在某处遗漏了一 block 。在 Webforms 中,我可能会在不使用查询字符串的情况下完成 url 重写来实现这一点,但我希望路由被设计为处理这样的事情,我看到的文章似乎让我认为这是可能的。
我一直在考虑的其他事项:John West 说 Sitecore 有 4 种方法来处理 MVC 请求
1.忽略请求:允许 ASP.NET MVC 处理它,就好像没有安装 Sitecore,而不建立 Sitecore 上下文。
2.应用路由:使用MVC路由指定的 Controller 和 Action 。
3.应用指定的 Action :使用上下文项中指定的 Controller 和 Action 。
4.应用 View :使用 Sitecore 的默认 Controller 和操作为上下文项中的上下文设备调用在布局详细信息中定义的 View 。
当我使用自定义路由时,我得到的似乎适合#2,但我需要的是更像#3或#4 同时仍然使用自定义路由。
最佳答案
由于您的存储桶中的项目没有任何 Presentation,我相信用路由来处理这个问题会很棘手。这可能是可能的,希望其他人会插话,但是......
你可以使用 wildcard Items实现你想要的。这将取决于组件的确切设置和结构,但只需创建一个名为 *
的项作为 /sitecore/content/Home/Blog
的子项。然后您可以在此通配符项上设置演示详细信息等。
现在任何 url 都会匹配这个项目。您需要在某个时候解析 Item,它可能在 Controller 本身中,您将需要解析 URL,然后查找要在渲染中使用的项目。 请注意 Context.Item 仍然是通配符 * 项目,因此您必须在代码中创建一个新变量然后填充您的模型:
Item requestedItem = Sitecore.Context.Database.GetItem("resolved-path");
Model.Name = requestedItem.Name;
Model.MyProperty = requestedItem["My Property"];
但是,最好在 ItemResolver
管道之后解析 Item,然后将 guid 存储在 Sitecore.Context.Items
字典中:
Item requestedItem = Sitecore.Context.Database.GetItem("resolved-path");
Sitecore.Context.Items["wildcard-guid"] = requestedItem.ID.ToString();
这样您就可以在多个组件中使用它并将其设置为组件的数据源(来自代码),例如面包屑、主要内容等。从缓存的角度来看,这也可能是有益的,因为您可以使用 VaryByData 选项启用缓存。如果需要,您还可以通过设置 Sitecore.Context.Item = null
找到 Item 时抛出适当的 404。
您还需要能够处理链接生成,所以您需要 create a custom LinkProvider生成一些友好的 URL。
希望这是有道理的!我必须尽快做类似的事情,这是迄今为止我想到的最佳选择...
关于c# - Sitecore MVC 自定义路由,同时仍然使用 Sitecore 渲染管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29828732/
我已将 Active Directory 模块与 sitecore 集成,我可以在 sitecore 用户管理器中看到广告中的用户。现在我想验证广告用户是否可以登录 sitecore。我为用户分配了
有没有办法通过代码访问Sitecore设置。 我感兴趣的具体设置是数据文件夹路径。 最佳答案 如果您想获得其他设置,您可能需要尝试:- Sitecore.Configuration.Settings.
根据 Sitecore 数据定义引用,版本 6.4,第 4.3.1 节: Sitecore processes queries using the fasted technology possible
Sitecore 6.6(更新4)。 MaxMind具有与DMS集成的Sitecore-specific lookup service选项。 MaxMind还具有一些更通用的Web服务。 可以将“通用
当我在 Sitecore 单行字段文本框中按 ENTER 时,它会呈现两个换行符 此问题仅出现在 Chrome/Firefox 中。在 IE ENTER 中只导致一个 我可以在这些浏览器中以某种方式
好奇为什么我无法从那里取回任何物品 HistoryManager.GetHistory(database, fromThisDate, toThisDate) ,我查看了 Sitecore 数据库,发
我们正在使用Sitecore 6.2,并且要求在Sitecore管理网站上使用SSL。 除了将内容保存在Rich Text编辑器中(单击“接受”按钮)时,所有指向媒体库项目的URL都将添加“ http
如何以编程方式登录 Sitecore? 例如,如果您想将 Sitecore API 的一小部分连接到桌面应用程序,则需要先登录到 sitecore 才能访问数据库等。 这可以做到吗? 最佳答案 正如
我已将 Sitecore 安装设置到两个不同的 IIS 站点。一个包含所有 Sitecore 管理文件,另一个包含共享相同 Web.config 的干净 Web 文件,而我的 Data 文件夹位于这两
我在一台开发服务器上安装了 sitecore,并将站点根文件夹复制到一堆开发机器上。此过程在 7 台计算机中的 6 台上运行良好,我们可以正常看到 sitecore 登录和内容编辑器页面,并通过 II
我已经设置了一个本地 Sitecore 环境,所有 sql 和 mongodb 数据库都可以正常工作。 除了我在体验文件(联系人)中没有获得任何数据 我看到 mongo 中的tracking_cont
我的 Sitecore 网站要求用户名是电子邮件地址。 我可以在代码中成功创建用户,但每当我尝试在用户管理器上的 Sitecore CMS 中手动创建 Extranet 用户时,都会引发电子邮件用户名
客户询问 Sitecore 中是否有任何地方内容作者可以为内容项的单个版本添加内部注释。该注释可能会说“我更改了内容字段以包含更新的描述”之类的内容。这与您在工作流程中提交项目时简单地添加评论不同。他
现在我的 sitecore 工作流程遇到问题。问题如下: 我的模板标准值已设置工作流程和默认工作流程字段集。工作流程状态设置为草稿。但是,每次我从此模板创建项目时,它都不会继承工作流程部分字段,所有字
我在 sitecore 用户管理器中遇到了这个奇怪的错误。我一打开用户管理器就收到此错误我无法将用户分配给角色。 有人可以帮忙吗? 提前致谢。 P.S > 以防万一它无法正确显示:http://www
我知道有一个 SortOrder 字段。然而,在我看来,该字段很多次都是空的,直到您真正开始在列表中四处移动内容项。然后,如果您有一个项目列表并四处移动其中一些项目,将为它们分配一个 SortOrde
我知道这听起来像是一个愚蠢的问题,但无数的谷歌搜索都没有给我想要的答案。我看到很多关于如何基于 Sitecore 模板等格式化电子邮件的数据,但没有关于实际发送邮件的信息。我是否需要通过 .net 代
我想 Hook item:renamed 事件来做一些处理。不过可能需要几分钟。事件处理程序是与正常管道执行异步执行还是同步执行?如果我需要自己执行此操作,是否有标准的 Sitecore 方法可以异步
我一直在浏览 Sitecore.Kernel,但似乎找不到 Sitecore 运行 Initialize 管道的位置。它是在每个页面请求上运行还是在应用程序启动时只运行一次?您能指出为此管道调用 Ru
我已经在 sitecore 中安装了重定向模块。在模块内部,我创建了“重定向网址”。在重定向网址中,我写了请求的网址“http://domainname/pagename”并从内容中选择了重定向到。但
我是一名优秀的程序员,十分优秀!