Wordpress就像ASP.NET MVC2 / 3或ASP.NET 4.0中的动态永久链接

时间:2011-01-01 16:07:17

标签: asp.net-mvc asp.net-mvc-routing permalinks

情景:

有两个实体称“书籍”和“书评”。可以有多本书,每本书都可以有多个评论。

每篇评论和图书都应该有一个单独的永久链接。用户可以使用单独的输入表单添加书籍和评论。一旦添加任何书籍/评论,它应该可以通过其固定链接访问。

任何人都可以指出我应该如何实施?

1 个答案:

答案 0 :(得分:3)

网址路由将开箱即用,无需额外的实际工作。

只需创建一个Books或BookReviews控制器。 创建一个采用Id

的操作方法

你会有像这样的基本永久链接 /书籍/详细信息/ 1 和 / BookReviews /详情/ 4

如果你喜欢这样的永久链接,那么你很高兴。 :)

然而,如果你想进一步发展并使其更加适合搜索引擎,那就更多了......

首先,您应该创建或找到一个简单的“slug”编码器,它将获取一个字符串(可能是书籍或评论者的标题),并将任何非字母数字字符编码为 - 或类似字符。 URL Slugify algorithm in C#?

现在我们可以创建一个像

这样的路线

书籍/ {TITLE} - {ID}

        routes.MapRoute(
            "BooksSeoRoute", 
            "Books/{slug}-{id}", 
            new { controller = "Books", action = "Details" } // Parameter defaults
        );

所以我们最终得到的永久链接看起来像: 图书/该-标题的最图书-38

对于书评,您可能希望采用“嵌套”方法,以便使用

    routes.MapRoute(
            "BookReviewsSeoRoute", 
            "Books/{book-slug}/{slug}-{id}", 
            new { controller = "BookReviews", action = "Details" } // Parameter defaults
        );

书籍/的-的即用的图书-38 /审查逐约翰史密斯-24

您可以向模型/ entites /数据库添加一个slug字段,或者您可以添加一个将从您的标题/作者动态生成它的getter

public class Book {

public string Id {get;set;}

public string Title {get;set;}

public string Slug
get
{
 return SlugEncoder.EncodeString(this.Title);
}
}

在您的观点中

=Html.ActionLink("Permalink","Details","Book",new{@Id=Model.Id, @Slug=Model.Slug})