web-dev-qa-db-ja.com

複数のパラメーターを持つActionLink

私はActionLink/?name=Macbeth&year=2011のようなURLを作成したいと思います。

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

しかし、それは機能しません。どうすればいいですか?

30
Cameron

使用しているオーバーロードにより、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
)
61
Mikael Östberg

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(); 
}
6
hidden

MikaelÖstbergの回答に基づいており、万が一、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" } })
2
Jansen