网址路由,将ID更改为数据库中的名称

时间:2016-05-12 19:16:24

标签: c# asp.net webforms

不确定它是否是最佳解决方案,但我可以说我有这样的网址

?id=2

Id取自数据库,如何使其显示

/<article_title_name>/

而不是id。

我已经谷歌搜索了几个小时了,我真的无法找到如何检索文章名称,而它仍然会显示所选文章的目标ID,但网址只是不同。

不确定我是否做得很好。

1 个答案:

答案 0 :(得分:0)

以下是我将如何做slug链接:

这应该让你的生活变得更容易一点,而不是必须反向魔术一些魔法,将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;
}

取决于你想要放置此功能的位置;我会让你决定。

生成并存储slu ::
调用GenerateSlug方法,传递PostTitle或任何你想要的“slugify”;它会为你的“slug”返回一个漂亮的字符串。

然后将该字符串存储到您的数据库/商店等。

检索文章
非常简单,诚实。

在路由表中,您可以将其转换回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进行选择,以防你正在调试或者不管情况如何(如果它是一个很长的文章名称,可以节省输入整个slug)。

这应该让你起步并继续前往一些看起来很漂亮的slu :: :)

希望这有帮助!