Я не могу заставить @ActionLink отобразить правильный URL для работы с маршрутизацией MVC3 по умолчанию - PullRequest
0 голосов
/ 22 октября 2011

Я пытаюсь воспользоваться преимуществами маршрутизации по умолчанию, поэтому я получаю URL без параметра строки запроса.

Итак, в настоящее время у меня есть этот URL:

 http://www.mysite.Items/Edit?ItemID=19719

И я пытаюсь получить URL-адрес, подобный следующему:

 http://www.mysite.Items/Edit/19719

Маршрутизация работает, но я не могу получить метод @ Html.ActionLink для получения второго URL-адреса.

Здесьмой код бритвы:

 @Html.ActionLink("Edit", "Edit", new {item.ItemID}, new { id = "edit-" + item.ItemID })

Первый аргумент - это текст моей ссылки.Второй аргумент - это Действие.3-е - это значение идентификатора, и, наконец, последний аргумент и атрибут HTML, который я использую для некоторого JavaScript, который я использую.

Первоначально у меня был 3-й аргумент как

  new {itemID = itemID}

Это было, когда мойДействие редактирования ожидало целочисленное значение с именем itemID в качестве параметра.Я изменил его на 'id', чтобы маршрутизация работала.

В идеале я хотел бы, чтобы маршрут, который передал бы значение 19719, действию с аргументом с именем itemID, но это выходит за рамки этого вопроса.

Заранее спасибо.

РЕШЕНО Спасибо Дарин Димитров за это решение.

В итоге я оставил свой HTML-код иДействие аргументов так, как я их имел изначально.Все, что действительно требовалось, было обновлением моих маршрутов.Я должен отметить, что мне пришлось добавить мою новую карту маршрутов до того, как по умолчанию.В любом случае, вот моя регистрация на маршруте, благодаря которой все это заработало.

  public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute("", "Items/{action}/{itemID}", new { controller = "Items", action = "Details", itemID = @"\d+" });
        routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional } );           
    }

1 Ответ

4 голосов
/ 22 октября 2011

Маршруты по умолчанию используют id в качестве имени токена маршрута, поэтому вам нужно:

@Html.ActionLink(
    "Edit", 
    "Edit", 
    new { id = item.ItemID }, 
    new { id = "edit-" + item.ItemID }
)

Уведомление new { id = item.ItemID }, а не new {itemID = itemID} и не new {item.ItemID}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...