2011-01-01 1 views
0

シナリオ:ASP.NET MVC2/3またはASP.NET 4.0のダイナミックパーマリンクのようなWordpress

「Books」と「Book Reviews」という2つのエンティティがあります。複数の書籍があり、各書籍は複数のレビューを持つことができます。

各レビューと本には別のパーマリンクが必要です。ブックとレビューは、ユーザーが別々の入力フォームを使用して追加することができます。書籍/レビューが追加されると、直ちにパーマリンクでアクセスできます。

これはどのように実装すればよいのですか?

答えて

3

URLルーティングでは、実際の追加作業は必要ありません。

BooksまたはBookReviewsコントローラを作成するだけです。 そのようなパーマリンクであなたの幸せならばあなたは /書籍/詳細/ 1 と /BookReviews /詳細/ 4などの基本的なパーマリンクに

を持っていますIdを

を取るアクションメソッドを作成し、あなたがしています行ってもいい。しかし :)

、あなたはさらにそれを取ると少しより多くの仕事とそれがさらに、検索エンジンに優しいようにしたい場合は......

最初に作成または「シンプルを見つける必要があります文字列(おそらく書籍やレビューアのタイトル)を取り、英数字以外の文字をa - などにエンコードします。 URL Slugify algorithm in C#?

は、今、私たちのようなルートを作成することができます

ブックス/ {タイトル} - {ID}

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

は、だから我々は次のようになりパーマリンクで終わる:/タイトル・オブ ブックス書評のために-Theブック-38

あなたは

routes.MapRoute(
      "BookReviewsSeoRoute", 
      "Books/{book-slug}/{slug}-{id}", 
      new { controller = "BookReviews", action = "Details" } // Parameter defaults 
     ); 
を使用することができますので、あなたは、「ネストされた」アプローチを持っている場合があります

書籍/ The-Of-The-Book-38/Review-by-John-Smith-24

あなたのモデル/エンタテイメント/データベースにスラッグフィールドを追加することもできます。動的にあなたの意見

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

ちょっとそこでは

public class Book { public string Id {get;set;} public string Title {get;set;} public string Slug get { return SlugEncoder.EncodeString(this.Title); } } 

つまり、あなたのタイトル/著者

からそれを生成しますゲッター。私の現在のルート設定での設定はあなたのコードで述べたとおりですが、私はそれをルートレベルでslugパラメータに変更する必要があります。そこで代わりに: "Books/{book-slug}/{slug} - {id}"、example.com/ {slug}が必要です。これで私を助けることができますか? –

関連する問題