0

私は個人的なブログであるサイトを作成しています。私は管理パネルに新しいブログを入力するときに、特定のルーティングを与えたいと思います。通常は保存するときにデータベースIDと一致します。私はとにかくスタティックルーティングにアクセスできない。Asp.Net Mvc Uniq Routing

私はブログがルーティング

デフォルトを介して入力されているとき、リンクパラメータは、データベースに格納されるようにしたい:ローカルホスト/コントロール名/ ACTIONNAME/ID(ローカルホスト/ブログ/ GetBlogs/2)

BU私がしたいこと

募集:localhostの/コントロール名/ ACTIONNAME/storedValue(localhostの/ブログ/ GetBlog /ブルースカイ) または はlocalhost/storedValue(ローカルホスト/ブルースカイ)

答えて

0

何よあなたが話しているのはスラグです。 URLの一部を構成する一意の文字列値を保持するには、ブログクラスにプロパティを追加するだけです。たとえば、次のようにブログを作成する際に

[Index] 
[StringLength(80)] 
public string Slug { get; set; } 

はその後、あなたが手動(そのフォームのフィールドにする)やブログか何かの「slugifying」のタイトルで、それを構成するSlugの値を指定します。たとえば、あなたが何か行うことができ、その後

public static string RemoveDiacritics(this string s) 
{ 
    s = s ?? string.Empty; 
    if (s.Length > 0) 
    { 
     char[] chars = new char[s.Length]; 
     int charIndex = 0; 

     s = s.Normalize(NormalizationForm.FormD); 
     for (int i = 0; i < s.Length; i++) 
     { 
      char c = s[i]; 
      if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark) 
       chars[charIndex++] = c; 
     } 

     return new string(chars, 0, charIndex).Normalize(NormalizationForm.FormC); 
    } 

    return s; 
} 

public static string Slugify(this string s, int maxLength = 80) 
{ 
    s = s ?? string.Empty; 
    //First to lower case 
    s = s.ToLowerInvariant().RemoveDiacritics(); 
    //Replace spaces 
    s = Regex.Replace(s, @"\s", "-", RegexOptions.Compiled); 
    //Remove invalid chars 
    s = Regex.Replace(s, @"[^a-z0-9s\-_]", "", RegexOptions.Compiled); 
    //Trim dashes from end 
    s = s.Trim('-', '_'); 
    //Replace double occurences of - or _ 
    s = Regex.Replace(s, @"([\-_]){2,}", "$1", RegexOptions.Compiled); 

    while (s.Length > maxLength) 
    { 
     var pieces = s.Split('-'); 
     pieces = pieces.Take(pieces.Count() - 1).ToArray(); 
     s = string.Join("-", pieces); 
    } 

    return s; 
} 

:私は、次の文字列拡張機能を使用しますが、スラグを作成しかし

blog.Slug = blog.Title.Slugify(); 

、あなたがルックアップするためのURLのparamを使用しますがそれによるブログ:Slugプロパティは上記[Index]が飾られている理由

public ActionResult GetBlog(string slug) 
{ 
    var blog = db.Blogs.SingleOrDefault(m => m.Slug == slug); 

です。これにより、EFは列を作成し、列を追加するときに列の索引を作成します。クエリを行う列は、パフォーマンスの理由からインデックスを作成する必要があります。また、NVARCHAR(MAX)(文字列のデフォルトの列型)は索引付けできないため、列のセット長を定義する必要があります。

+0

コメントありがとうございます! –