0

在 Sitecore 6.5 解决方案中,我有以下内容;

<sc:Text runat="server" Field="bodyText"/>

Sitecore.Context.Item["bodyText"]

我在解决方案中的很多地方都使用了后者——第一个没有那么多。我现在发现,当使用后者时,所有指向媒体库的链接都采用格式~/media/31F0E8084F9443789F25836A2B285D3E.ashx,即使在 web.configMedia.UseItemPaths中设置为。true

但是,当我使用第一个提到的方法时<sc:Text />,媒体库项目的链接格式正确(没有 guid,但媒体库的文件夹结构)。

这是怎么回事?

4

3 回答 3

3

正如 halbherz 提到的后者

Sitecore.Context.Item["bodyText"]

是字段的文字值。它不通过 sitecoreRenderField管道,因此没有任何链接被扩展。

如果要从后面的代码中呈现字段,可以使用如下FieldRenderer类:

Sitecore.Web.UI.WebContols.FieldRenderer.Render("bodyText", Sitecore.Context.Item)
于 2012-08-06T10:21:41.003 回答
1

只是为了进一步澄清(@halbherz 和@marto 说的是完全正确的),以便您可以更好地理解〜为什么〜他们是这样的。

在 RichText 字段中,媒体和其他站点核心项目的链接使用项目的“短 GUID”以这种格式 (~/media/31F0E8084F9443789F25836A2B285D3E.ashx) 存储,因此如果有人重命名或移动您的媒体/内容项目,则链接仍将有效(而不是在字段中嵌入项目的全名和路径)。

当您使用 FieldRenderer(或从 FieldRenderer 继承的控件,例如 sc:text / sc:image 等)时,RenderField将调用管道并由处理链接LinkManager(有关配置的更多信息,请参阅您的 web.config<LinkManager>部分)。LinkManager 的存在是为了以一致的方式处理所有链接。直接调用字段值绕过此管道,您将获得该字段的原始文本。

您可以使用以下方法创建自己的链接:LinkManager.GetDynamicUrl(item);

于 2012-08-06T11:31:09.053 回答
0

第一个是一个控件,它通过某些管道和 redners 将项目引用保存为友好的 url。

第二个是直接值调用,它返回未经编辑的值。要获得一个friednly url,您应该使用控件。

为什么需要直接调用值?

于 2012-08-06T09:06:55.937 回答