状況:
コンテンツツリーの「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"));