2016-03-14 93 views
1

我对Sitecore和C#很陌生,过去几天我一直在努力寻找一些东西,所以我希望你们其中一个能够帮助我。如何获取Sitecore 7.2中一般链接的url路径C#

我刚刚从Sitecore 6升级到7,并且发生了一些变化。以下代码用于在Sitecore 6中工作,但获取LinkField的url的方式不再适用。

protected string writeBalloon(Item targetItem) 
    { 
     string balloonString = ""; 

     Sitecore.Data.Fields.LinkField linkfield = targetItem.Fields["Link"]; 

     balloonString += "<a class='balloon-link' href='" + linkfield.Url + "'>"; 
     balloonString += "<div class='balloon'>"; 

     balloonString += "<h3>"; 
     balloonString += targetItem.Fields["Title"]; 
     balloonString += "</h3>"; 
     balloonString += "<p>"; 
     balloonString += targetItem.Fields["Text"]; 

     balloonString += "</p>"; 
     balloonString += "</div>"; 
     balloonString += "</a>"; 

     return balloonString; 
    } 

我想我已经读/试图就此事对谷歌的所有文章,但我似乎仍不能得到它的权利。

回答

0

你需要首先检查你的链接字段类型,使用linkfield.Url仅与Sitecore的外部链接类型的作品,这里是你的代码应该如何看起来像:

public String LinkUrl(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; 
    } 
} 



protected string writeBalloon(Item targetItem) 
{ 
     string balloonString = ""; 

     Sitecore.Data.Fields.LinkField linkfield = targetItem.Fields["Link"]; 

     balloonString += "<a class='balloon-link' href='" + LinkUrl(linkfield) + "'>"; 
     balloonString += "<div class='balloon'>"; 

     balloonString += "<h3>"; 
     balloonString += targetItem.Fields["Title"]; 
     balloonString += "</h3>"; 
     balloonString += "<p>"; 
     balloonString += targetItem.Fields["Text"]; 

     balloonString += "</p>"; 
     balloonString += "</div>"; 
     balloonString += "</a>"; 

     return balloonString; 
} 

Note:本取供LinkUrl代码段()方法从该Answer

+0

非常感谢您的快速回复。像魅力一样工作! :) –

4

采取自Sitecore的7.2,一种方法GetFriendlyUrl()加入到LinkField类来解决这个问题。

Sitecore.Data.Fields.LinkField linkfield = targetItem.Fields["Link"]; 
var url = linkfield.GetFriendlyUrl(); 

GeneralLink in Sitecore