2013-01-14 34 views
1

我正在處理中等大小的ASP.NET Webforms站點。內部鏈接等URL都是使用的語法像這樣一般設置:在ASP.NET中構造URL以避免死鏈接

<asp:HyperLink runat="server" NavigateUrl="~/Some/Path/MyPage.aspx" Text="Blah" /> 

這讓我有點緊張,因爲這些鏈接僅僅是字符串,我很擔心,如果我重命名或移動頁面,我將有麻煩追逐所有參考。

是否有一些ASP.NET-y的方式來確定運行時的實際路徑?我設想是這樣的:

NavigateUrl="<%= GetUrl(typeof(MyPage)) %>" 
+1

如果您使用的是適度大小的應用程序,則需要花一些時間才能通過所有代碼將其更改爲查看數據庫表。 – Anonymous

+0

我知道。我不是在尋找一個神奇的子彈,而是一個更好的解決方案來遷移到。 –

回答

0

你真正想要的是像一把umbraco,Sitecore的,OpenText公司等一個CMS

但是,你可以敲東西了自己一個數據庫,並與ID表和Url列。那麼你可以這樣做:

NavigateUrl="<%= GetUrl("AwesomeLink") %>" 

它可以去數據庫,查找ID並填寫鏈接爲您準備好。它也可以讓你改變鏈接而不用重新編譯。

它和你的想法很相似,除了你仍然需要告訴它在某個時候你想要什麼樣的鏈接。它不能爲你猜測。

+0

這樣的解決方案需要考慮的一件事是數據庫利用的分支。對於這些鏈接中的每一個,對於每個頁面調用,您都將執行數據庫查詢。一些緩存機制將有助於緩解這一點。 –

+0

我知道有人會回來的。自然我會緩存:) – Lloyd

1

您可以根據文件夾結構的邏輯定義方法GetUrl。假設您的命名空間不符合您的文件夾結構基本定義是如下

public string GetUrl(System.Type CurrentType) 
    { 
     List<string> PathInNamespace = CurrentType.FullName.Split('.').ToList<string>(); 
     PathInNamespace.RemoveAt(0); 
     return "/" + string.Join("/", PathInNamespace.ToArray());  
    } 
0

一個非代碼的解決辦法是創造自定義錯誤頁中所述錯誤鏈接到你的網站的其它部分或插入一個搜索框頁面。它快速,簡單,也有助於搜索引擎優化。