在Sitecore 6.5解决方案中,我有以下内容;
<sc:Text runat="server" Field="bodyText"/>
和
Sitecore.Context.Item["bodyText"]
我在解决方案中使用后者的许多地方 - 第一个不是那么多。
我现在发现,使用后者时,所有指向medialibrary的链接都采用~/media/31F0E8084F9443789F25836A2B285D3E.ashx
格式,即使{。1}}在web.config中设置为Media.UseItemPaths
。
但是,当我使用第一个提到的方法true
时,medialibrary项目的链接格式正确(没有guid,但媒体库的文件夹结构)。
怎么回事?
答案 0 :(得分:3)
正如halbherz提到后者
Sitecore.Context.Item["bodyText"]
是该字段的字面值。它不会通过sitecore RenderField
管道,因此不会扩展任何链接。
如果要从后面的代码中渲染字段,可以使用FieldRenderer
类,如:
Sitecore.Web.UI.WebContols.FieldRenderer.Render("bodyText", Sitecore.Context.Item)
答案 1 :(得分:1)
只是为了进一步澄清(@halbherz和@marto所说的完全正确),这样你就可以更好地理解〜为什么〜他们就是这样。
在RichText字段中,使用项目的“短GUID”以此格式(〜/ media / 31F0E8084F9443789F25836A2B285D3E.ashx)存储媒体和其他sitecore项目的链接,这样,如果有人重命名或移动您的媒体/内容项,则链接仍然有效(而不是在字段中嵌入项目的全名和路径)。
当您使用FieldRenderer(或从FieldRenderer继承的控件,如sc:text / sc:image等)时,RenderField
管道被调用,链接由LinkManager
处理(请参阅web.config <LinkManager>
部分有关配置的更多信息)。存在LinkManager,以便以一致的方式处理所有链接。直接调用字段值会绕过此管道,您将获得该字段的原始文本。
您可以使用以下内容创建自己的链接:LinkManager.GetDynamicUrl(item);
答案 2 :(得分:0)
第一个是一个控件,它通过某些管道和redners保存的项目引用作为友好的URL。
第二个是直接值调用,它返回未编辑的值。 要获得一个非常好的网址,你应该使用控件。
为什么需要直接调用该值?