您应该小心使用linkField.Url
,因为它会错误地呈现指向 Sitecore 项目和媒体的内部链接。你应该使用Sitecore.Links.LinkManager.GetItemUrl(item)
andSitecore.Resources.Media.MediaManager.GetMediaUrl(item)
来代替那些。
根据链接的类型,最好有一个帮助器(扩展)方法为您返回正确的 url。看看这个Sitecore Links with LinkManager and MediaManager博客文章,其中包含您需要的正确代码。
以供参考:
public static String LinkUrl(this Sitecore.Data.Fields.LinkField lf)
{
switch (lf.LinkType.ToLower())
{
case "internal":
// Use LinkMananger for internal links, if link is not empty
return lf.TargetItem != null ? Sitecore.Links.LinkManager.GetItemUrl(lf.TargetItem) : string.Empty;
case "media":
// Use MediaManager for media links, if link is not empty
return lf.TargetItem != null ? Sitecore.Resources.Media.MediaManager.GetMediaUrl(lf.TargetItem) : string.Empty;
case "external":
// Just return external links
return lf.Url;
case "anchor":
// Prefix anchor link with # if link if not empty
return !string.IsNullOrEmpty(lf.Anchor) ? "#" + lf.Anchor : string.Empty;
case "mailto":
// Just return mailto link
return lf.Url;
case "javascript":
// Just return javascript
return lf.Url;
default:
// Just please the compiler, this
// condition will never be met
return lf.Url;
}
}
用法:
Sitecore.Data.Fields.LinkField linkField = item.Fields["Link1"];
lnkMain.NavigateUrl = linkField.LinkUrl();
当然最好使用<sc:FieldRender>
控制并让 Sitecore 为您处理,但您似乎没有该选项。