ActionLink с несколькими параметрами
Я хочу создать URL как /?name=Macbeth&year=2011
с моим ActionLink
, который я пробовал делать так:
<%= Html.ActionLink("View Details", "Details", "Performances", new { name = item.show }, new { year = item.year })%>
но это не сработает. Как мне это сделать?
Ответы
Ответ 1
Используемая вами перегрузка делает значение year
в атрибутах html ссылки (проверьте полученный вами источник).
Подпись перегрузки выглядит следующим образом:
MvcHtmlString HtmlHelper.ActionLink(
string linkText,
string actionName,
string controllerName,
object routeValues,
object htmlAttributes
)
Вам нужно поместить оба значения маршрута в словарь RouteValues
следующим образом:
Html.ActionLink(
"View Details",
"Details",
"Performances",
new { name = item.show, year = item.year },
null
)
Ответ 2
В дополнение к ответу Mikael Östberg добавьте что-то подобное в свой global.asax
routes.MapRoute(
"View Details",
"Performances/Details/{name}/{year}",
new {
controller ="Performances",
action="Details",
name=UrlParameter.Optional,
year=UrlParameter.Optional
});
затем в вашем контроллере
// the name of the parameter must match the global.asax route
public action result Details(string name, int year)
{
return View();
}
Ответ 3
Основываясь на ответе Микаэла Эстберга, и на всякий случай люди должны знать, как это происходит с html attr. Вот еще один пример, ссылка из ActionLink
@Html.ActionLink("View Details",
"Details",
"Performances",
new { name = item.show, year = item.year },
new {@class="ui-btn-right", data_icon="gear"})
@Html.ActionLink("View Details",
"Details",
"Performances", new RouteValueDictionary(new {id = 1}),new Dictionary<string, object> { { "class", "ui-btn-test" }, { "data-icon", "gear" } })
Ответ 4
Я предлагаю вам создать новый RouteValueDictionary, который получил массив ключей/значений следующим образом:
new RouteValueDictionary (new {param1 = value1, param2 = param2}
@Html.ActionLink("Текст ссылки", "Действие", "Контроллер", новый RouteValueDictionary (new {param1 = value1, param2 = value2}))