私はActionLink
で/?name=Macbeth&year=2011
のようなURLを作成したいと思います。
<%= Html.ActionLink("View Details", "Details", "Performances", new { name = item.show }, new { year = item.year })%>
しかし、それは機能しません。どうすればいいですか?
使用しているオーバーロードにより、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
)
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();
}
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" } })