2016-05-12 92 views
1

不知道這是任何最佳的解決方案,但可以說我有網址這樣URL路由,從數據庫中更改ID的名稱

?id=2 

將ID從數據庫中獲取,如何使其向顯示類似於

/<article_title_name>/ 

而不是id。

我一直在Google上搜索幾個小時,但我無法真正瞭解如何檢索文章名稱,但它仍然會顯示所選文章的目標身份,但網址會有所不同。

不確定我是否確實解釋過它._。

+1

此鏈接可能會有所幫助:) http://weblogs.asp.net/scottgu/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series - 適用於所有VS 2010向上和.NET 4.0及以上 –

+1

我認爲你要找的是「slug」鏈接。有一個谷歌,你會得到噸的教程:) –

+0

@GeoffJames謝謝,我無法找到我的自我> W <'開始閱讀' – Harugawa

回答

0

這是我會怎麼做蛞蝓鏈接:

這應該讓你的生活,只是有點更容易,而不是扭轉魔法一些巫術到string匹配到這篇文章的標題就是找到ID。

這裏去...

對模型的另一個屬性:
Article■創建您的數據庫表/模型的另一列/屬性,稱爲sluglink什麼您選擇的,就像有意義的。

創建方法來生成它們:
當您保存到數據庫/存儲庫等你的文章,有一個可以創建鏈接,你和它存儲在該領域的功能。

這樣,你就沒有必要將魔術字符串反向工程化爲ID;你可以在數據庫/存儲等中找到匹配的slug,然後以這種方式返回。

有一個很棒的功能可以做到這一點(感謝this post) - 這篇文章給出了創建擴展方法時的方法;我剛剛適應它,並凝聚成爲簡潔起見一個功能,如果你不知道的擴展方法:

public string GenerateSlug(string postTitle) 
{ 
    var str = System.Text.Encoding.ASCII.GetString(System.Text.Encoding 
             .GetEncoding("Cyrillic") 
             .GetBytes(postTitle)); 

    // invalid chars   
    str = Regex.Replace(str, @"[^a-z0-9\s-]", ""); 
    // convert multiple spaces into one space 
    str = Regex.Replace(str, @"\s+", " ").Trim(); 
    // cut and trim 
    str = str.Substring(0, str.Length <= 45 ? str.Length : 45).Trim(); 
    str = Regex.Replace(str, @"\s", "-"); // hyphens 
    return str; 
} 

這是給你,你想把這個功能;我會讓你決定。

生成並存儲毛坯:
調用GenerateSlug方法,通過你的PostTitle或任何你想「slugify」;它會爲你的「slu」「返回一個漂亮的字符串。

然後該字符串存儲到數據庫/存儲等

檢索文章
很簡單,在所有誠實。

在您的路由表中,您可以將其轉換回您的WebForm,然後找到正確的文章。這裏有一個關於如何做到這一點的好鏈接:http://weblogs.asp.net/scottgu/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series

然後,以實際上相同的方式,您將GetArticleById(1234),從您的存儲庫/商店;我會創建另一種方法 - 猜猜看是什麼... GetArticleBySlug(heres-a-great-article) - 或者再一次,你喜歡什麼。

最後
對於不純正的緣故,我還是不得不通過ID做選擇,如果你正在調試或任何情況下(節省打字了整個廢料,如果它是一個漫長的文章名)。

這應該讓你和運行,並用自己的方式在一定非常好看蛞蝓:)

希望這有助於!