Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何检索sitecore超链接?_Asp.net_.net_Sitecore - Fatal编程技术网

Asp.net 如何检索sitecore超链接?

Asp.net 如何检索sitecore超链接?,asp.net,.net,sitecore,Asp.net,.net,Sitecore,情况: 假设我有一个项目(页面)位于我的内容树中的“sitecore/Content/Home/mypage”。我想在.aspx布局中创建指向此项目的超链接 问题: 如何在.aspx布局中创建指向此项目的超链接 (记不起的正确语法)我不确定在Adil的示例中,URL是否由LinkProvider处理? 我通常会在代码中绑定NavigateUrl属性 <asp:HyperLink ID="hlHyperLink" runat="server" Text="my link text" />

情况:
假设我有一个项目(页面)位于我的内容树中的“sitecore/Content/Home/mypage”。我想在.aspx布局中创建指向此项目的超链接

问题:
如何在.aspx布局中创建指向此项目的超链接


(记不起
的正确语法)

我不确定在Adil的示例中,URL是否由LinkProvider处理? 我通常会在代码中绑定NavigateUrl属性

<asp:HyperLink ID="hlHyperLink" runat="server" Text="my link text" />

如果需要在代码中获取项目的url,无论是否在链接中使用它,都可以使用
Sitecore.Links.LinkManager.GetItemUrl(项目,选项)

我建议不要将它与单个参数一起使用(
GetItemUrl(item)
),因为它不考虑配置选项(例如禁用语言字符串作为路径的一部分:
/en/path/to/item
可能会出现,而不是
/path/to/item

要使用配置选项,可以克隆默认URL选项:

var opts = (UrlOptions) UrlOptions.DefaultOptions.Clone();
var url = LinkManager.GetItemUrl(item, opts);
我经常使用此方法,因此使用以下扩展方法:

public static string GetUrl(this Item source, bool absolutePath = false)
{
    if (source == null)
        throw new ArgumentNullException("source");
    var options = (UrlOptions) UrlOptions.DefaultOptions.Clone();
    options.AlwaysIncludeServerUrl = absolutePath;
    return LinkManager.GetItemUrl(source, options);
}

使用此格式的优点是,它允许您通过ID识别项目并链接到它,而不管它位于内容树中的何处。

对于超链接之类的简单内容,我是否需要触摸代码隐藏??那将是不幸的。。这不烦人吗?还是每个人都会因为任何原因而接受它作为最好的方式?@EricTurner,这取决于上下文。在某些情况下,链接到路径是有意义的,而在另一些情况下,您希望基于ID链接到项目。@EricTurner如果不想编辑布局的代码文件,您将如何在布局的代码文件中创建链接?如果你想在一个页面上有一个链接,并且它有一个富文本字段,你可以使用它。但那只适用于那一页。也许我们误解了你想要实现的目标?是否要添加使用该布局的所有页面上的链接?或者只是有一个带有文本的页面,您希望在其中有一个链接?另外,如果您的上下文项上有一个常规链接或内部链接字段,您可以使用来呈现链接,而不必触摸后面的代码。但不要过度设计。如果它是一个静态链接,那么最简单的方法就是将标记放入标记中。使用代码片段,您可能会得到一个空引用异常。在使用GetItemUrl方法之前,首先尝试获取该项。
public static string GetUrl(this Item source, bool absolutePath = false)
{
    if (source == null)
        throw new ArgumentNullException("source");
    var options = (UrlOptions) UrlOptions.DefaultOptions.Clone();
    options.AlwaysIncludeServerUrl = absolutePath;
    return LinkManager.GetItemUrl(source, options);
}