实现产品/ Apple-ipad代替产品/ Index / 23

时间:2012-01-06 06:45:37

标签: asp.net-mvc-3 url url-rewriting

我无法将标题写入,所以我解释了我正在照顾的内容。

目前,我在View中使用以下ActionLink代码。

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

此代码重定向到Product Controller

中的以下操作方法
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/Apple-ipad ,而不是 mysite.com/Product/Index/22

我知道,我可以使用产品名称代替Id,并将其传递给action方法。但是,这种方式我认为查询将变慢,因为Id字段已编入索引,但Name不是。这是我唯一的选择。让我知道你将如何处理这个要求。

1 个答案:

答案 0 :(得分:1)

在路线中使用产品名称而不是ID,并在数据库的产品名称列中添加nonclustered index

这样你就不会在选择中获得性能上的提升(尽管你会在插入/更新/删除时得到一个,但我怀疑这些选择远远少于选择)。

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

我在一些地方看到的另一种方法是使用名称和id,如mysite.com/Product/Apple-ipad/22。该名称实际上并未被代码使用,而且它只适用于SEO。这样做的一个很大的缺点是,不喜欢您的网站的人可以在互联网上放置各种网址,以便谷歌找到相同的内容。谷歌不喜欢这样,所以你的网站受到了惩罚,你比以前更糟糕。