Je veux créer une URL comme /?name=Macbeth&year=2011
avec mon ActionLink
que j'ai essayé de faire comme ceci:
<%= Html.ActionLink("View Details", "Details", "Performances", new { name = item.show }, new { year = item.year })%>
mais ça ne marche pas. Comment puis-je faire cela?
La surcharge que vous utilisez fait que la valeur year
se retrouve dans les attributs html du lien (vérifiez votre source rendue).
La signature de surcharge ressemble à ceci:
MvcHtmlString HtmlHelper.ActionLink(
string linkText,
string actionName,
string controllerName,
object routeValues,
object htmlAttributes
)
Vous devez mettre vos deux valeurs de route dans le dictionnaire RouteValues
comme ceci:
Html.ActionLink(
"View Details",
"Details",
"Performances",
new { name = item.show, year = item.year },
null
)
En plus de la réponse de Mikael Östberg, ajoutez quelque chose comme ça dans votre global.asax
routes.MapRoute(
"View Details",
"Performances/Details/{name}/{year}",
new {
controller ="Performances",
action="Details",
name=UrlParameter.Optional,
year=UrlParameter.Optional
});
puis dans votre manette
// the name of the parameter must match the global.asax route
public action result Details(string name, int year)
{
return View();
}
Basé sur la réponse de Mikael Östberg et juste au cas où les gens auraient besoin de savoir comment il fonctionne avec attr html. Voici un autre exemple, référence de 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" } })