Url.Action, откуда берется параметр
У меня есть этот код JavaScript в представлении:
function getUrl(id) {
var url = "@Url.Action("Product", "Product")/" + id;
return url;
}
и это конфигурация маршрутизации:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "localized",
url: "{culture}/{controller}/{action}/{id}/{title}",
defaults: new { culture = "en", controller = "Home", action = "Index",
id = UrlParameter.Optional, title = UrlParameter.Optional},
constraints: new { culture = "en|fa" }
);
Что я ожидаю от Url.Action("Продукт", "Продукт"), так это возвращение /en/Product/Product/
но то, что я получил, это /en/Product/Product/92
92 - идентификатор текущего продукта, и я пытаюсь создать URL для следующего продукта. Я мог найти обходной путь благодаря трюку с заменой этого ответа, но теперь я просто хочу знать, почему это происходит.
2 ответа
Url.Action
будет включать текущие значения маршрута, если вы не укажете их.
Попробуйте это вместо
@Url.Action("Product", "Product", new { id = UrlParameter.Optional })/" + id;
Или вы могли бы установить id
обнулить в Url.Action
позвоните, чтобы очистить его, а затем добавьте идентификатор до конца.
Идентификатор по умолчанию будет передан в URL. Вы создаете URL с любым идентификатором, переданным с этой строкой
var url = "@Url.Action("Product", "Product")/" + id;
если вы получаете текущий идентификатор в URL, то это то, что вы передаете этому методу. Если вы хотите получить URL без идентификатора, просто удалите эту часть
var url = "@Url.Action("Product", "Product")";
ссылка, которую вы заменили, очень полезна для передачи информации из скрипта в действие, которое вы вызываете. Отличный способ объединить MVC и JavaScript