Wordpress как динамические постоянные ссылки в ASP.NET MVC2 / 3 или ASP.NET 4.0 - PullRequest
0 голосов
/ 01 января 2011

Сценарий:

Есть две сущности: «Книги» и «Обзоры книг». Может быть несколько книг, и каждая книга может иметь несколько рецензий.

Каждый обзор и книга должны иметь отдельную постоянную ссылку . Книги и обзоры могут быть добавлены пользователями с помощью отдельных форм ввода. После добавления любой книги / рецензии она должна быть доступна по ее постоянной ссылке.

Кто-нибудь может указать мне правильное направление на то, как это должно быть реализовано?

1 Ответ

3 голосов
/ 01 января 2011

URL-маршрутизация будет обрабатывать это из коробки без дополнительной реальной работы.

Просто создайте контроллер Books или BookReviews.Создайте метод действия, который принимает Id

. У вас будут основные постоянные ссылки, такие как / Books / Details / 1 и / BookReviews / Details / 4

Если вы довольны такими постоянными ссылками, то выхорошо пойти.:)

Однако , если вы хотите продвинуться дальше и сделать его еще более дружественным для поисковых систем с немного большим количеством работы ......

СначалаВы должны создать или найти простой кодировщик «слаг», который будет принимать строку (возможно, название книги или рецензента) и кодировать любые не алфавитно-цифровые символы в - или аналогичные. Алгоритм URL Slugify в C #?

Теперь мы можем создать маршрут, подобный

Книги / {title} - {id}

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

Итакмы получаем постоянные ссылки, которые выглядят следующим образом: Книги / The-Title-Of-Book-38

Для рецензирования книг вам может понадобиться «вложенный» подход, чтобы вы могли использовать

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

Книги / The-Of-The-The-Book-38 / Review-by-John-Smith-24

Вы можете добавить поле слагов в свои модели / entites / database,или вы можете просто добавить геттер, который будет динамически генерировать его из вашего названия / автора

т.е.

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})
...