我无法将标题写入,所以我解释了我正在照顾的内容。
目前,我在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不是。这是我唯一的选择。让我知道你将如何处理这个要求。
答案 0 :(得分:1)
在路线中使用产品名称而不是ID,并在数据库的产品名称列中添加nonclustered index。
这样你就不会在选择中获得性能上的提升(尽管你会在插入/更新/删除时得到一个,但我怀疑这些选择远远少于选择)。
CREATE INDEX IX_[index_name]
ON [schema].[table_name] ([column_name]);
我在一些地方看到的另一种方法是使用名称和id,如mysite.com/Product/Apple-ipad/22。该名称实际上并未被代码使用,而且它只适用于SEO。这样做的一个很大的缺点是,不喜欢您的网站的人可以在互联网上放置各种网址,以便谷歌找到相同的内容。谷歌不喜欢这样,所以你的网站受到了惩罚,你比以前更糟糕。