情况:
假设我的内容树中有一个位于“sitecore/Content/Home/mypage”的项目(页面)。我想在我的 .aspx 布局中创建指向此项目的超链接。
问题:
如何在我的 .aspx 布局中创建指向此项目的超链接?
(不记得正确的语法了<asp:Hyperlink>
)
如果您需要在代码中获取项目的 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 识别项目并链接到它,无论它位于内容树的什么位置。
我不确定在 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"));