2014-02-03 5 views
0

У меня есть этот яваскрипта код в представлении:Url.Action, Где параметр пришел из

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-адрес для следующего продукта. Я мог найти обходное решение благодаря трюку замены this answer, но теперь я просто хочу знать, почему это происходит.

+0

Что вы подразумеваете под «Я пытаюсь создать URL для следующего продукта» ?, могли бы вы показать нам действие, которое вы собираетесь перенаправить с помощью ajax-звонка? – Ehsan

ответ

2

Url.Action будет включать в себя текущие значения маршрута, если вы их не укажете.

Попробуйте вместо

@Url.Action("Product", "Product", new { id = UrlParameter.Optional })/" + id; 

Или вы можете установить id в нуль в Url.Action вызова, чтобы очистить его, а затем добавить идентификатор к концу.

+0

Первая строка вашего ответа - это подтверждение, которое мне нужно для объяснения этого поведения, спасибо. – VahidNaderi

1

Идентификатор по умолчанию будет передан по URL-адресу. Вы создаете URL с любым идентификатором передаются с этой линией

var url = "@Url.Action("Product", "Product")/" + id; 

если вы получаете текущий идентификатор в URL, то это то, что вы передаете этот метод. Если вы хотите, чтобы получить URL без идентификатора просто удалить, что часть

var url = "@Url.Action("Product", "Product")"; 

ЗАМЕНИТЬ вы связаны очень полезно для передачи информации от сценария к действию, которому вы звоните. Отличный способ объединить MVC и javascript