C# 如何在Sitecore 7.2 C中获取常规链接的url路径#

C# 如何在Sitecore 7.2 C中获取常规链接的url路径#,c#,sitecore,sitecore7,sitecore7.2,C#,Sitecore,Sitecore7,Sitecore7.2,我对Sitecore和C#还很陌生,在过去的几天里,我一直在努力解决一些问题,所以我希望你们中的一位能够帮助我 我刚刚从Sitecore 6升级到7,并且有一些变化。以下代码用于Sitecore 6,但获取链接字段url的方式不再有效 protected string writeBalloon(Item targetItem) { string balloonString = ""; Sitecore.Data.Fields.LinkField lin

我对Sitecore和C#还很陌生,在过去的几天里,我一直在努力解决一些问题,所以我希望你们中的一位能够帮助我

我刚刚从Sitecore 6升级到7,并且有一些变化。以下代码用于Sitecore 6,但获取链接字段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;
    }
受保护的字符串写分配(项targetItem)
{
字符串“=”;
Sitecore.Data.Fields.LinkField LinkField=targetItem.Fields[“Link”];
气球字符串+=“”;
返回字符串;
}

我想我已经阅读了/尝试了谷歌上所有关于这个问题的文章,但我仍然无法正确理解。

您需要首先使用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;
}
公共字符串链接URL(Sitecore.Data.Fields.LinkField lf)
{
开关(lf.LinkType.ToLower())
{
案例“内部”:
//如果链接不为空,则对内部链接使用LinkManager
返回lf.TargetItem!=null?Sitecore.Links.LinkManager.GetItemUrl(lf.TargetItem):string.Empty;
案例“媒体”:
//如果链接不为空,请使用MediaManager进行媒体链接
返回lf.TargetItem!=null?Sitecore.Resources.Media.MediaManager.GetMediaUrl(lf.TargetItem):string.Empty;
“外部”案例:
//只需返回外部链接
返回lf.Url;
案例“锚定”:
//在锚点链接前面加上#if link(如果链接不为空)
return!string.IsNullOrEmpty(lf.Anchor)?“#”+lf.Anchor:string.Empty;
案例“mailto”:
//只需返回mailto链接
返回lf.Url;
案例“javascript”:
//只需返回javascript
返回lf.Url;
违约:
//请告诉编译器,这个
//条件永远不会满足
返回lf.Url;
}
}
受保护的字符串写分配(项targetItem)
{
字符串“=”;
Sitecore.Data.Fields.LinkField LinkField=targetItem.Fields[“Link”];
气球字符串+=“”;
返回字符串;
}

注意
:为LinkUrl()方法提取的代码片段取自此

您需要首先使用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;
}
公共字符串链接URL(Sitecore.Data.Fields.LinkField lf)
{
开关(lf.LinkType.ToLower())
{
案例“内部”:
//如果链接不为空,则对内部链接使用LinkManager
返回lf.TargetItem!=null?Sitecore.Links.LinkManager.GetItemUrl(lf.TargetItem):string.Empty;
案例“媒体”:
//如果链接不为空,请使用MediaManager进行媒体链接
返回lf.TargetItem!=null?Sitecore.Resources.Media.MediaManager.GetMediaUrl(lf.TargetItem):string.Empty;
“外部”案例:
//只需返回外部链接
返回lf.Url;
案例“锚定”:
//在锚点链接前面加上#if link(如果链接不为空)
return!string.IsNullOrEmpty(lf.Anchor)?“#”+lf.Anchor:string.Empty;
案例“mailto”:
//只需返回mailto链接
返回lf.Url;
案例“javascript”:
//只需返回javascript
返回lf.Url;
违约:
//请告诉编译器,这个
//条件永远不会满足
返回lf.Url;
}
}
受保护的字符串写分配(项targetItem)
{
字符串“=”;
Sitecore.Data.Fields.LinkField LinkField=targetItem.Fields[“Link”];
气球字符串+=“”;
返回字符串;
}

注意
:自Sitecore 7.2以来,
链接字段
类中添加了一个方法
GetFriendlyUrl()
,该方法的LinkUrl()代码片段取自此

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

请参见

自Sitecore 7.2以来,向
链接字段
类添加了一个方法
GetFriendlyUrl()
,以解决此问题

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

请参见

非常感谢您的快速回复。工作得很有魅力!:)非常感谢您的快速回复。工作得很有魅力!:)