2016-05-12 15 views
1
それはどんな最適解であるが、私はIdがデータベースから取得され、この

URLルーティング、データベースから名前にIDを変更

?id=2 

のようなURLを持って言うことができます場合

わからない、どのように私はそれを作るのですかidの代わりに

/<article_title_name>/ 

のように表示してください。

私は数時間前からグーグルグーグルをしていましたが、記事IDを使って選択した記事が表示されているにもかかわらず、どのように記事名を取得できるのか分かりませんでした。

私がそれをうまく説明したかどうかはわかりません。

+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

です。あなたが探しているのは「スラッグ」リンクだと思います。 Googleを持っていれば、チュートリアルをたくさん手に入れることができます:) –

+0

@GeoffJamesありがとう、私は自分自身でそれを見つけることができませんでした> w <'読み始める' – Harugawa

答えて

0

は、ここで私はスラグのリンクを行うだろう方法は次のとおりです。

これはむしろちょうど見つけるために、投稿のタイトルにstringをマッチングにいくつかの魔法を、魔法を逆にすることよりも、あなたの人生は、ちょうどその少し簡単に行う必要がありますID。ここで

が行く...

は、モデル上の別のプロパティを持っている:
と同じように、sluglinkまたはお好みの何かと呼ばれる、あなたのArticleのためのあなたのDBテーブル/モデル内の別の列/プロパティを作成します。意味のある

それらを生成する方法を作成します。
あなたがなどのリポジトリDB /にあなたの記事を保存すると、あなたのためのリンクを作成して、その場でそれを保存することができます機能を持っています。

こうして、マジック文字列をIDにリバースエンジニアリングする必要はありません。あなたはデータベース/ストアなどで一致するスラッグを見つけて、それをそのまま返すことができます。

これを行うには素晴らしい機能があります(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; 
} 

それはあなたがこの機能を配置するのはあなた次第です。私はあなたに決めるつもりです。あなたのPostTitleまたはあなたが「slugify」にしたいものは何でも渡し、
コールGenerateSlug方法;:

スラグを生成し、保存しますあなたの "スラッグ"のためのすてきな文字列を返します。

はその後、すべての正直で
かなり簡単な記事を、取得などのデータベース/ストア

にその文字列を格納します。

ルーティングテーブルでこれを翻訳してWebフォームに戻し、正しい記事を検索して見つけることができます。これを行うには良いリンクがあります: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によってそれを行うためのオプションを持っていると思います記事名)。

これは、起動して実行し、このことができます:)

希望いくつかの素晴らしい探してナメクジにあなたの方法であなたを取得する必要があります!

関連する問題