Достижение продукта / Apple-ipad вместо продукта / Индекс / 23 - PullRequest
0 голосов
/ 06 января 2012

Мне не удалось написать слова для названия, поэтому я объяснил, что я ищу.

В настоящее время я использую следующий код ActionLink в View.

@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 / Index / 22 * ​​1010 * мой URL должен выглядеть примерно так: mysite.com / Product / Apple-ipad .

Я знаю, что могу использовать имя продукта вместо идентификатора и передавать его в метод действия. Но, таким образом, я думаю, что запросы будут работать медленнее, поскольку поле Id проиндексировано, а имя - нет. Это единственный вариант в моем распоряжении. Дайте мне знать, как вы справитесь с этим требованием.

1 Ответ

1 голос
/ 06 января 2012

Используйте имя продукта в маршруте вместо идентификатора и поместите некластеризованный индекс в столбец имени продукта в базе данных.

Таким образом, вы не получите удар по производительности для выбора (хотя вы получите удар по вставке / обновлению / удалению, но я подозреваю, что это происходит гораздо реже, чем выбор).

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

Еще один способ, который я видел в некоторых местах, - это использовать как имя, так и идентификатор, например mysite.com/Product/Apple-ipad/22. Название на самом деле не используется кодом, а просто для SEO. Один большой недостаток этого заключается в том, что кто-то, кому не нравится ваш сайт, может размещать различные URL-адреса, ведущие к одному и тому же контенту, по всему Интернету для поиска в Google. Google это не нравится, поэтому ваш сайт оштрафован, и вы хуже, чем раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...