2

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

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

不记得正确的语法了<asp:Hyperlink>

4

2 回答 2

3

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

我建议不要将它与单个参数 ( 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 识别项目并链接到它,无论它位于内容树的什么位置。

于 2012-07-26T13:38:32.760 回答
2

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

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

然后在 C#

hlHyperLink.NavigateUrl = Sitecore.Links.LinkManager.GetItemUrl(Sitecore.Context.Database.GetItem("path_to_item"));
于 2012-07-26T13:26:10.593 回答