Подтвердить что ты не робот

ActionLink с несколькими параметрами

Я хочу создать URL как /?name=Macbeth&year=2011 с моим ActionLink, который я пробовал делать так:

<%= Html.ActionLink("View Details", "Details", "Performances", new { name = item.show }, new { year = item.year })%>

но это не сработает. Как мне это сделать?

4b9b3361

Ответ 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}))