Sitecore中的GeneralLink

我是Sitecore的新手。我创建了一个页面模板,并为General Link类型的URL添加了一个字段。 我为链接的文本创建了另一个字段(这是此项目中的标准做法)。

我只是想在我的用户控件中显示链接,但我不能让它工作。 这应该很简单,但我会围成一圈

这是我尝试过的代码示例..

ascx:

 

ascx.cs:

 lnkMain.NavigateUrl = SiteCore.Context.Item.GetGeneralLink("Link1"); lnkMain.Text = item.GetFieldValue("Link1Text"); 

您应该小心使用linkField.Url因为它会错误地呈现Sitecore项目和媒体的内部链接。 您应该使用Sitecore.Links.LinkManager.GetItemUrl(item)Sitecore.Resources.Media.MediaManager.GetMediaUrl(item)

根据链接类型,最好有一个帮助(扩展)方法为您返回正确的URL。 看看这个Sitecore链接与LinkManager和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(); 

当然最好使用控件让Sitecore为你处理它,但看起来你没有那个选项。

从Sitecore 7.2开始,有一个替代linkField.Url:

 Sitecore.Data.Fields.LinkField linkField = item.Fields["Link1"]; lnkMain.NavigateUrl = linkfield.GetFriendlyUrl(); 

引入了一个新的LinkField.GetFriendlyUrl()方法。 无论字段包含哪种类型的链接,该方法都可以轻松输出有效的URL。 对于内部链接,该方法从LinkManager.GetItemUrl()返回一个URL。 对于媒体链接,该方法从MediaManager.GetMediaUrl()返回一个URL。 对于外部链接,锚链接,电子邮件链接和JavaScript链接,该方法返回LinkField.Url属性的值。 (400051)

http://techitpro.com/uncategorized/sitecore-7-2-changes/

如果使用Link控件会更容易:

    

这样,您不必执行任何代码隐藏的东西,您也可以使用页面编辑器。

你可以在下面使用

    

它会对你有用。

为项目的GeneralLink字段分配值时,弹出的“内部链接”对话框中会出现标记为“链接描述”的字段。 填写该值然后使用:

  

而已。 一切都在为你“自动”,自动神奇。

您需要获取项目的Linkfield值,然后获取该项目的LinkField类型。 这将为您提供“内部”,“外部”,“mailto”链接的类型,并且基于该链接可以获取链接字段的URL,因为@jammykam提到了这一点。

您也可以检索LinkText

以供参考 :

 public static string GetGeneralLinkText(LinkField link) { text = ""; if (link == null) return false; if (!string.IsNullOrEmpty(link.Text)) { text = link.Text; return true; } switch (link.LinkType) { case "internal": if (link.TargetItem == null) return false; text = link["Text Field Name"]; break; case "external": case "mailto": case "anchor": case "javascript": text = link.Text; break; case "media": if (link.TargetItem == null) return false; Sitecore.Data.Items.MediaItem media = new Sitecore.Data.Items.MediaItem(link.TargetItem); text = media.Name; break; case "": break; default: return ""; } return link["Text Field Name"]; }