Использование Html.ActionLink для вызова действия на другом контроллере - PullRequest
214 голосов
/ 22 апреля 2009

Я пытаюсь перемещаться между контроллерами, используя ActionLink. Я расскажу мою проблему с примером.

Я нахожусь в представлении Index контроллера Hat и пытаюсь использовать приведенный ниже код для создания ссылки на действие Details контроллера Product.

<%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }) %>

Вместо создания ссылки на подробности на контроллере продукта это создает ссылку на действие «Подробности» в контроллере Hat и добавляет в конец параметр длины:

Hat/Details/9?Length=7

Я не могу использовать HTML.ActionLink для переключения между контроллерами из-за этой проблемы. Буду признателен, если вы укажете мне, что я делаю неправильно. Спасибо

PS: я использую настройку маршрута по умолчанию, которая поставляется с MVC

routes.MapRoute("Default", "{controller}/{action}/{id}", 
                     new { controller = "Home", action = "Index", id = "" } );

Ответы [ 8 ]

389 голосов
/ 22 апреля 2009

То, что вы хотите, это перегрузка:

//linkText, actionName, controllerName, routeValues, htmlAttributes
<%=Html.ActionLink("Details", "Details", 
    "Product", new {id = item.ID}, null) %>
17 голосов
/ 24 июня 2013

С этими параметрами вы запускаете неправильную перегруженную функцию / метод.

Что сработало для меня:

<%= Html.ActionLink("Details", "Details", "Product", new { id=item.ID }, null) %>

Запускает HtmlHelper.ActionLink (строка linkText, строка actionName, строка controllerName, объект routeValues, объект htmlAttributes)

Я использую MVC 4.

Cheerio!

10 голосов
/ 01 декабря 2016

Я бы порекомендовал написать эти помощники, используя именованные параметры, для ясности:

@Html.ActionLink(
    linkText: "Details",
    actionName: "Details",
    controllerName: "Product",
    routeValues: new {
        id = item.ID
    },
    htmlAttributes: null
)
10 голосов
/ 22 апреля 2009

Если вы возьмете сборку MVC Futures (которую я очень рекомендую), вы можете использовать универсальный тип при создании ActionLink и лямбду для построения маршрута:

<%=Html.ActionLink<Product>(c => c.Action( o.Value ), "Details" ) %>

Вы можете получить сборку фьючерсов здесь: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471

7 голосов
/ 22 апреля 2009

Вы неправильно нажали на перегрузку ActionLink. Попробуйте вместо этого.

<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
6 голосов
/ 12 августа 2011

попробуй это работает нормально

  <%:Html.ActionLink("Details","Details","Product",  new {id=item.dateID },null)%>
3 голосов
/ 26 января 2016

Альтернативным решением будет использование вспомогательного объекта Url для установки атрибута href тега <a>, например:

<a href="@Url.Action("Details", "Product",new { id=item.ID }) )">Details</a>
0 голосов
/ 09 февраля 2016

этот код работал для меня в частичном представлении:

<a href="/Content/Index?SubCategoryId=@item.Id">@item.Title</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...