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

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

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

<%= 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 = "" } );

Ответ 1

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

//linkText, actionName, controllerName, routeValues, htmlAttributes
<%=Html.ActionLink("Details", "Details", 
    "Product", new {id = item.ID}, null) %>

Ответ 2

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

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

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

Он запускает HtmlHelper.ActionLink(string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)

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

Cheerio!

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

попробуйте, он отлично работает

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

Ответ 6

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

@Html.ActionLink(
    linkText: "Details",
    actionName: "Details",
    controllerName: "Product",
    routeValues: new {
        id = item.ID
    },
    htmlAttributes: null
)

Ответ 7

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

<a href="@Url.Action("Details", "Product",new { id=item.ID }) )">Details</a>

Ответ 8

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

<a href="/Content/[email protected]">@item.Title</a>