2012-07-26 79 views
2

情況:
想象一下,我的內容樹中有一個位於'sitecore/Content/Home/mypage'的項目(頁面)。我想在.aspx佈局中創建一個超鏈接到這個項目。如何檢索sitecore超鏈接?

問:
如何才能在我的.aspx佈局創建超鏈接到這個項目嗎?

記不住<asp:Hyperlink>正確的語法)

回答

2

我不知道如果阿迪爾的例子中,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")); 
+0

我是否需要觸摸簡單內容的超級鏈接代碼隱藏?這將是不幸的。這不是煩人的?還是每個人都接受它作爲無論出於何種原因的最佳方式? – sean 2012-07-26 13:44:42

+0

@EricTurner,它取決於上下文。在某些情況下,鏈接到路徑是有道理的,在其他情況下,您希望鏈接到基於ID的項目。 – zzzzBov 2012-07-26 13:50:57

+0

@EricTurner如果你不想編輯它,你會怎麼建議在佈局的代碼文件中創建一個鏈接?如果你想要一個頁面上的鏈接,並且它有一個Rich Text字段,你可以使用它。但是那隻會是那個頁面。也許我們誤解了你想完成的事情?您是否想添加使用該佈局的所有頁面上的鏈接?還是隻有一個文本的頁面,你想要一個鏈接? – Holger 2012-07-26 14:52:20

3

如果你需要獲得一個項目的代碼的網址,您是否正在使用它一個鏈接,你可以使用Sitecore.Links.LinkManager.GetItemUrl(item, options)

我建議不要使用它與一個參數(GetItemUrl(item)),因爲它不會尊重配置選項(如禁用語言字符串作爲路徑的一部分:/en/path/to/item可能會出現,而不是/path/to/item)。

要使用的配置選項,您可以複製默認的網址選項:

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來標識一個項目並鏈接到它,而不管它在內容樹中的什麼位置。