URL-адрес action-маршрута mvc использует вместо идентификатора имя - PullRequest
5 голосов
/ 21 октября 2011

Я думаю, что уже спрашивал об этом, но решение не имело смысла.Во всяком случае, у меня есть ActionLinks на мои представления, как это:

foreach( var item in Model){
<%: Html.ActionLink(item.Name, "Details", new {id = item.Id}) %>
}

сейчас, когда дело доходит до моих подробностей действий, очевидно, это будет URL

/MyThings/Details/{id}

Мне было интересно, если это возможнопоказать имя этого предмета вместо идентификатора Использование слаг?или изменить глобальный asax следующим образом:

/MyThings/Details/CarKeys

Дело в том, что имена должны быть уникальными, есть ли способ изменить глобальный asax, чтобы он отображал имя вместо идентификатора?

Любой совет очень ценится!

Ответы [ 2 ]

8 голосов
/ 21 октября 2011

Если это исключительно для целей SEO, просто укажите и идентификатор, и имя. Имя будет частью URL, но не будет использоваться вашим приложением. Просто добавьте другой маршрут, который использует шаблон: {controller}/{action}/{id}/{name}

Вы также захотите изменить свое имя, чтобы убедиться, что оно содержит только допустимые символы для URL. В сети множество статей об этом, и это довольно просто. Вот пример: http://chrismckee.co.uk/creating-url-slugs-permalinks-in-csharp/

6 голосов
/ 21 октября 2011

Конечно, вам просто нужно изменить правила маршрутизации.Найдите в файле Global.asax.cs или в файле регистрации своего региона что-то вроде этого:

routes.MapRoute(..., "{controller}/{action}/{id}", ...);

... и измените его на что-то вроде этого:

routes.MapRoute(..., "{controller}/{action}/{name}", ...);

Затем сделайте так, чтобы ваше действие взяло имя вместо идентификатора:

Html.ActionLink(item.Name, "Details", new {item.Name})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...