2012-01-06 11 views
0

タイトルの書き込みワードを置くことができなかったので、私は何を見ているのか説明しました。製品/インデックス/ 23の代わりにApple/ipad製品を達成

現在、私はViewで次のActionLinkコードを使用しています。

@Html.ActionLink(@product.Name, "Index", "Product", new { id = @product.Id }, null) 

このコードは、私が欲しいもの、製品のコントローラ今

public ActionResult Index(int id) 
{ 
    Product product = pe.Products.Where(p => p.Id == id).First(); 
    ViewBag.Title = product.Name; 
    ViewBag.Description = product.MetaDescription; 
    ViewBag.Keywords = product.MetaKeywords; 
    return View(product); 
} 

で、次のアクションメソッドにリダイレクトします。代わりにmysite.com/Product/Index/22の、私のURLは次のようなものでなければなりませんmysite.com/Product/Apple-ipad

Idの代わりに製品名を使用し、それをアクションメソッドに渡すことができます。しかし、この方法では、Idフィールドは索引付けされているが、Nameは索引付けされていないため、問合せが遅くなると思う。これは私の処分で唯一の選択肢ですか?この要件をどのように処理するか教えてください。

答えて

1

IDではなくルートで製品名を使用し、nonclustered indexをデータベースの製品名の列に置きます。

そのようにすれば、選択にパフォーマンスヒットはありません(ただし、挿入/更新/削除には1つのヒットがありますが、それらは選択よりはるかに少ないと思われます)。

CREATE INDEX IX_[index_name] 
ON [schema].[table_name] ([column_name]); 

私はいくつかの場所で使用さ見てきたもう一つの方法は、名前とmysite.com/Product/Apple-ipad/22などのIDの両方を使用しています。名前は実際にコードで使われているわけではなく、SEOのためだけにあります。これの大きな欠点の1つは、あなたのサイトが嫌いな人は、インターネット上の同じコンテンツにつながるさまざまなURLをGoogleが見つけるために置くことができるということです。 Googleはそれを好まないので、あなたのサイトには罰則が科せられ、以前よりも悪化しています。

+0

私はSOの数字(私がIDと思われる)と質問のタイトルの両方を使用するのを見ました。あなたはどうやってSOの人はこれを管理していると思います –

+0

私はあなたの最初の方法を理解することができません。非クラスタ化インデックスを使用するとどういう意味ですか?あなたが助けることができるか少しの説明を与えることができます....ありがとう –

+1

グローバルasaxのルートを登録: routes.MapRoute( "製品"、 "{コントローラ}/{アクション}/{ID}/{ productName} "、 new {controller =" Product "、action =" Index "、id =" "、productName =" "} ); コントローラーでは、あなたが興味のある唯一のIDであるため、IDを見るだけです。 – linkerro

関連する問題