#asp.net-mvc #asp.net-mvc-routing
#asp.net-mvc #asp.net-mvc-routing
Вопрос:
Я хотел бы оптимизировать мой URL-адрес, отображаемый в веб-браузерах. Я знаю, что маршрутизация идеально подходит для этого, но я не знаю, возможно ли это так, как я хочу. У меня есть список проектов в виде списка. У каждого проекта есть идентификатор, имя и категория. При переходе на страницу с подробной информацией о продукте отображаемый URL-адрес должен быть «/ category / name». Я знаю, что могу передать идентификатор, категорию и имя в ActionLink и настроить маршрутизацию в Global.asax. Я уже делаю это, но у меня все еще есть идентификатор, который объединяется с остальной частью URL-адреса. Это некрасиво.
Вот пример:
Ссылка на действие, на мой взгляд:
@Html.ActionLink(@p.Name, "Detail", new { projectID = @p.ProjectID, category = @p.Category, name = @p.Name })
глобальный.asax:
routes.MapRoute(null,
"{category}/{name}",
new { controller = "Project", action = "Detail" }
);
Результирующий URL:
Как вы можете видеть, идентификатор проекта всегда добавляется в конец URL-адреса. Как я могу избежать такого поведения?
Спасибо.
Комментарии:
1. Если категории и имени достаточно, зачем вам передавать ProjectID в вашей ActionLink?
2. @counsellorben: категорию и название интересно отобразить в URL-адресе в адресной строке. ProjectID необходим в контроллере действий, чтобы получить правильный проект для передачи в подробное представление.
3. Тогда вы должны принять ответ Руана, поскольку он предоставит чистый URL.
Ответ №1:
routes.MapRoute(null,
"{category}/{name}/{projectID}",
new { controller = "Project", action = "Detail", projectID = UrlParameter.Optional }
);
даст вам
/ ПРОМЫШЛЕННОСТЬ / Рассылка/16
это то, чего вы хотите?
Комментарии:
1. Нет, в представлении я хотел бы создать ActionLink с несколькими параметрами (ProjectID, name, category). ProjectID используется в контроллере действий для получения правильного проекта. Далее, в URL я не хочу видеть идентификатор проекта. Я думаю, что это невозможно.