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

Другие вопросы по тегам