Ответ 1
Что вы хотите, это перегрузка:
//linkText, actionName, controllerName, routeValues, htmlAttributes
<%=Html.ActionLink("Details", "Details",
"Product", new {id = item.ID}, null) %>
Я пытаюсь перемещаться между контроллерами, используя 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 = "" } );
Что вы хотите, это перегрузка:
//linkText, actionName, controllerName, routeValues, htmlAttributes
<%=Html.ActionLink("Details", "Details",
"Product", new {id = item.ID}, null) %>
С помощью этих параметров вы вызываете неправильную перегруженную функцию/метод.
Что сработало для меня:
<%= 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!
Если вы возьмете сборку MVC Futures (которую я очень рекомендую), вы можете использовать общий тип при создании ActionLink и lambda для построения маршрута:
<%=Html.ActionLink<Product>(c => c.Action( o.Value ), "Details" ) %>
Вы можете получить сборку фьючерсов здесь: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471
Вы ошибаетесь в перегрузке ActionLink. Попробуйте это вместо.
<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
попробуйте, он отлично работает
<%:Html.ActionLink("Details","Details","Product", new {id=item.dateID },null)%>
Я бы рекомендовал написать эти помощники, используя именованные параметры, для ясности следующим образом:
@Html.ActionLink(
linkText: "Details",
actionName: "Details",
controllerName: "Product",
routeValues: new {
id = item.ID
},
htmlAttributes: null
)
Альтернативным решением было бы использовать вспомогательный объект Url
для установки атрибута href
тега <a>
, например:
<a href="@Url.Action("Details", "Product",new { id=item.ID }) )">Details</a>
этот код работал у меня в частичном представлении:
<a href="/Content/[email protected]">@item.Title</a>